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

最佳答案

strtok最后返回NULL以表示不再有标记,并调用试图从strcpy(buffer[i],tok);读取的NULL。这会导致segfault。
您可以通过将strtok移动到循环条件中来解决它:

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

或使用break语句转义循环:
while(1){
    tok = strtok (NULL, " ");
    if(tok == NULL) break;
    strcpy...

关于c - 函数执行但给出段错误,C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15933318/

10-11 15:35