函数执行但会产生分段错误C.

时间:2013-04-10 18:14:04

标签: c segmentation-fault

我编写了一个C函数,将char *作为输入,并使用空格拆分并在字符串数组中再次存储令牌。

我的代码正确执行但在完成执行之前,它会出现错误,说明分段错误。谁能告诉我什么是错的。

void parseCommand(char *msg)
{    
    char buffer[25][30];
    char *tok;
    char *msgCopy;
    //strcpy(msgCopy,msg);
    msgCopy =msg;
    tok = strtok(msgCopy," ");
    strcpy(buffer[0],tok);
    int i=1;
    while(tok != NULL ){

        tok = strtok (NULL, " ");
        strcpy(buffer[i],tok);  //me line eke error eka
        printf("%d : %s\n",i,buffer[i]);
        i++;
    }
}

1 个答案:

答案 0 :(得分:3)

strtok最终返回NULL表示没有其他令牌,并且您致电strcpy(buffer[i],tok);并尝试从NULL读取。这会导致段错误。

您可以通过将strtok移动到循环条件来解决它:

while((tok = strtok (NULL, " ")) != NULL ){
    strcpy...

或使用break语句转义循环:

while(1){
    tok = strtok (NULL, " ");
    if(tok == NULL) break;
    strcpy...