可能重复:
为什么在写入字符串时会出现分段错误?
我的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编译器.
strtok()修改它解析的字符串.如果您使用:
char* line = "...";
Run Code Online (Sandbox Code Playgroud)
然后修改一个字符串文字,这是未定义的行为.当你使用:
char[] line = "...";
Run Code Online (Sandbox Code Playgroud)
然后修改字符串文字的副本.
分配"LINE TO BE SEPARATED"时char *line,line指向程序可执行文件中写入的常量字符串.您不能修改它.您应该将这些变量声明为const char *.
声明为时char[],您的字符串在函数的堆栈中声明.因此,您可以修改它.
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |