如何正确存储strtok

时间:2015-02-21 02:12:41

标签: c arrays pointers malloc realloc

我有:

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数组声明;

2 个答案:

答案 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