文字列から余分なスペースを削除するプログラムを作成しました。
void removeDuplicateSpaces(char **c){ //a-b---c
char *a=*c;
char *b=malloc(sizeof(char)*strlen(*c)); <-- allocation
int i=0,nf=0,space=0;
for(;a[i]!='\0';i++){
if(a[i] != ' '){ //a-b-
if(space>1){
b[nf]=a[i];
nf++;
space=0;
}else{
b[nf]=a[i];
nf++;
}
}else{
space++;
if(space==1 && i!=0){
b[nf]=' ';
nf++;
}
}
}
b[i]='\0';
*c=b;
}
int main(void) {
char *a=" Arista is hiring from ISM Dhanbad";
removeDuplicateSpaces(&a); //function prototype can't be changed.
printf("%s",a); // ? where to deallocate.
return 0;
}
正常に動作しています。removeDuplicateSpaces()
しかし、問題は、関数に割り当てられたメモリをどこで解放する必要があるかです。printf
inの後に free ステートメントを追加main
すると、プログラムがクラッシュします ( signal 6 abort
)。では、正しい方法は何ですか?
元の問題
#include<stdio.h>
main()
{
char *foo = " Arista is hiring from ISM Dhanbad";
void removeDuplicateSpaces(foo);
printf("%s\n", foo);
}
上記のコードが与えられました。removeDuplicateSpaces
指定された文字列の余分なスペースを削除する関数を作成します。
例:(「-」は明確にするためにスペースを示します)
Input String : (without quotes)
“—-Arista——is—-hiring—-from-ISM–Dhanbad”
Output String :
“Arista-is-hiring-from-ISM-Dhanbad”