C函数中的分段错误

Rum*_*chi -3 c segmentation-fault

我正在尝试开发一个基本的shell.对于那个shell,我需要一个C函数来解析一个字符串.因为我是CI的新手,试图开发一个基本功能,它给我一个分段错误错误.请告诉我我错过了什么.

#include<string.h>
#include<stdio.h>


void parse(char *msg);
int main()
{
    char *msg =  "This is a message";
    parse(msg);
}

void parse(char *msg){
    char *mm;
    mm = msg;

    char *tok;
    tok = strtok(mm," ");
    while(tok == NULL){
        tok = strtok(NULL," ");
            printf("%s \n",tok);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息(运行时)

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

提前致谢

NPE*_*NPE 5

msg指向字符串文字,并且您尝试修改它.在C中,修改字符串文字是未定义的行为(实际上,编译器通常将它们放在只读内存中).

要修复,请msg变成一个数组:

int main()
{
    char msg[] =  "This is a message";
    parse(msg);
}
Run Code Online (Sandbox Code Playgroud)

此外,您的while循环还有几个问题:

1)条件是错误的方式;
2)第二个strtok()电话应该出现printf().

void parse(char *msg){
    char *mm = msg;
    char *tok = strtok(mm, " ");
    while (tok) {
        printf("%s \n",tok);
        tok = strtok(NULL," ");
    }
}
Run Code Online (Sandbox Code Playgroud)