-3
文字列s1
の各文字を、文字列s2
のいずれかの文字と一致する文字を削除しようとしました。 スクイーズメソッドのテストコードは次のとおりです。なぜセグメンテーションフォルト:11がCコードで発生しましたか?
#include <stdio.h>
void squeeze(char s1[], char s2[]);
int main()
{
char s1[20] = "HelloWorld", s2[20] = "ol";
squeeze(s1, s2);
printf("%s\n", s1);
return 0;
}
void squeeze(char s1[], char s2[])
{
int i, j, k;
k = 0;
for (i = 0; s1[i] != '\0'; ++i) {
for (j = 0; s2[j] != '\0'; ++j) {
if (s1[i] != s2[j])
s1[k++] = s1[i];
}
}
s1[k] = '\0';
}
私はこのコードを実行すると、端末は常にSegmentation fault: 11
を与えます。 誰も私にこのようなことが起こる理由を教えてもらえますか?
を参照してください新しい配列を使用してみてください、あなたのインデント –
あなたをデバッグしてみてくださいを修正してくださいコード! –
@kiner_shahに同意する - デバッガの使い方を学ぶ必要があります。ここでの問題は、 'k'の値が' s1'配列の終わりを超えていることです。 –