0

内側の while ループでセグメンテーション違反エラーが発生します。

char **c;
c=(char **)malloc(3*(N-1)*sizeof(char *));

for(int i=0;i<3*(N-1);)
{
    char *temp;
    gets(temp);
    while(*temp!='$')
    {
        j=0;
        while(*temp!=' ')
        {
            *(c[i]+j)=*(temp+j);
            j++;
        }
        i++;
    }
    i++;
}        

char * 文字列を操作するとエラーが発生することはわかっていますが、このエラーについてはわかりません。tmp 文字列を 3 つの異なる文字列に分割しようとしていました。

4

3 に答える 3

0

1)文字列tempをコピーするメモリ (バッファ) のブロックである必要がありgetsます。

char *temp = malloc (256 * sizeof(char)); /* 256 as example*/

2) 行の場合

while(*temp!='$')

while(*temp!=' ')

両方のループでtempポインターのインクリメント (たとえば)が見つかると予想されますが、そうではありません。temp++そしてこれは問題を引き起こします

私があなたの必要性を推測できるなら、ここであなたのコードの提案が修正された後(私はそれをテストしませんでした)

char **c;
c=(char **)malloc(3*(N-1)*sizeof(char *));

char copy[256];
char temp[256], *p;

for(int i=0;i<3*(N-1);i++)
{
    p = temp;
    gets(p);
    while(*p!='$')
    {
        j=0;
        while(*p!=' ')
        {
            *(copy+j)=*p;
            j++;
            p++;
        }
        if(*p=='\0')
            break;
        p++;
    }
    copy[j] = '\0'
    c[i] = strdup(copy); // allocate memory with size of copy string and then copy the content of copy to allocated memory
}  
于 2012-11-05T08:49:10.280 に答える