char*和char []是不是同一类型?

Dav*_*ita 4 c

可能重复:
为什么在写入字符串时会出现分段错误?

我的C代码遇到了一个奇怪的问题.我正在尝试使用strtok函数拆分字符串,但我得到访问冲突异常.这是我的代码:

char *token;
char *line = "LINE TO BE SEPARATED";
char *search = " ";
token = strtok(line, search); <-- this code causes crash
Run Code Online (Sandbox Code Playgroud)

但是,如果我char *line改为char line[],一切都按预期工作,我没有任何错误.

任何人都可以解释为什么我用strtok得到那个(对我来说很奇怪)的行为?我认为char*和char []是相同且确切的类型.

UPDATE

我正在使用MSVC 2012编译器.

hmj*_*mjd 8

strtok()修改它解析的字符串.如果您使用:

char* line = "...";
Run Code Online (Sandbox Code Playgroud)

然后修改一个字符串文字,这是未定义的行为.当你使用:

char[] line = "...";
Run Code Online (Sandbox Code Playgroud)

然后修改字符串文字的副本.


tom*_*ahh 5

分配"LINE TO BE SEPARATED"char *line,line指向程序可执行文件中写入的常量字符串.您不能修改它.您应该将这些变量声明为const char *.

声明为时char[],您的字符串在函数的堆栈中声明.因此,您可以修改它.