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 字符串分成三个不同的字符串。

4

3 回答 3

3

您只是为3 * (N - 1)字符串指针分配空间,而没有为字符本身分配空间。指针也未temp初始化,但您仍在使用gets(). 这会导致未定义的行为。

此外,您不应该在 C中转换 , 的返回值。malloc()

于 2012-11-05T08:29:44.407 回答
2

没有为temp变量分配内存。

char *temp;
gets(temp);
于 2012-11-05T08:29:45.510 回答
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 回答