0

我编写了一个 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++;
    }
}
4

1 回答 1

3

strtokfinally 返回NULL表示没有更多令牌的信号,您调用strcpy(buffer[i],tok);which 尝试读取NULL. 这会导致段错误。

strtok您可以通过进入循环条件来解决它:

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

break或使用语句转义循环:

while(1){
    tok = strtok (NULL, " ");
    if(tok == NULL) break;
    strcpy...
于 2013-04-10T18:28:06.520 回答