値で s1 を初期化し、後で squeeze() で初期化しようとしています。s1を変更しています。ポインターの初期化はセグ フォールトをスローしますが、配列バージョンは正常に動作します。ポインターバージョンでそれができるかどうか、そしてこれの何が問題なのか誰か教えてもらえますか? 私はmallocを使用していないためかもしれません??
int main() {
char s1[] = "xyz abc zzz" ; // this works fine.
// char *s1 = "xyz abc zzz"; // if i initialize like this it throws a seg fault.
char *s2 = "abx xxx xxx" ;
squeeze(s1,s2) ;
puts (s1) ;
return 0 ;
}
void squeeze(char *s1, char *s2 ) {
int i , j, k = 0;
for (i=0 ; s1[i] != '\0' ; ++i) {
for (j=0; s2[j] != '\0'; j++) {
if (s2[j] == s1[i])
break;
}
if(s2[j] == '\0')
s1[k++] = s1[i] ;
}
s1[k++] = '\0' ;
}