我有:
while (token != NULL)
{
token = strtok(NULL," ");
array.var = realloc(array.var,(counter + 1) * sizeof(char *));
array.var[counter] = malloc(strlen(token)+1);
strcpy(array.var[counter],token);
counter++;
}
其中var是声明为char **var;
的结构中的变量
当我尝试这个时,我得到一个段错误,我不知道为什么。如果取出malloc和strcpy,它不会出错,但我需要将令牌存储在数组中。数组由myStruct数组声明;
答案 0 :(得分:2)
在使用NULL
获取下一个令牌之前,您需要检查令牌是否为strtok()
。对strtok的最后一次调用将是NULL
,然后strlen(token)
将基本上为strlen(NULL)
并导致段错误。更改代码以在循环结束时而不是在开头处分配令牌,这也将阻止您跳过第一个令牌。
while (token != NULL)
{
array.var = realloc(array.var,(counter + 1) * sizeof(char *));
array.var[counter] = malloc(strlen(token)+1);
strcpy(array.var[counter],token);
counter++;
token = strtok(NULL," ");
}
答案 1 :(得分:0)
这一行:
token = strtok(NULL," ");
无法检查对strtok()
的调用结果建议:
if( NULL == (token = strtok(NULL, " ") ) )
{// then, strtok failed to find a ' ' delimeter
break; // exit while loop
}
// implied else, strtok successful