0
#include<stdio.h>
void squeeze(char *s1,char *s2);

main()
{
    char *s1="string";
    char *s2="spring";
    squeeze(s1,s2);
    printf("%s",s1);
}

void squeeze(char *s1,char *s2)
{
    int i=0,j=0,k=0,bool=1;
    for(i=0,k=0;s1[i]!='\0';i++)
    {
      for(j=0;s2[j]!='\0';j++)
        if(s1[i]==s2[j])
        {
           bool=0;
           break;
        }
     if(bool)
     {
         s1[k++]=s1[i];
     }
     bool=1;
    }
    s1[k]='\0';
}

このプログラムは私にセグフォルトを与えました.gdbでデバッグしようとしました. エラーは 25 行目 (すなわち) にあります。 s1[k++]=s1[i];

Javaで同じ関数を実行してみました。驚くべきことに、それはうまく機能していました。ポインターを配列に置き換え、ルーパーが配列の長さと等しいときにループを終了しました。ありがとう

4

1 に答える 1

1

文字列リテラルを変更しようとしています。文字列リテラルは、C の定数の読み取り専用文字列です。これを変更することはできません。文字列を char 配列として宣言してみてください。

char s1[] = "string";
char s2[] = "spring";
于 2013-09-25T01:49:30.733 に答える