【发布时间】:2012-11-16 10:14:58
【问题描述】:
可能重复:
Why do I get a segmentation fault when writing to a string?
我的 C 代码遇到了一个奇怪的问题。我正在尝试使用 strtok 函数拆分字符串,但出现访问冲突异常。这是我的代码:
char *token;
char *line = "LINE TO BE SEPARATED";
char *search = " ";
token = strtok(line, search); <-- this code causes crash
但是,如果我将 char *line 更改为 char line[],一切都会按预期进行,并且不会出现任何错误。
任何人都可以解释为什么我使用 strtok 会出现这种(对我来说很奇怪)行为?我认为 char* 和 char[] 是相同且精确的类型。
更新
我正在使用 MSVC 2012 编译器。
【问题讨论】:
-
您的编译器应该拒绝或至少警告转换为
char*(在 C++11 中不再允许)。调高警告级别。 -
@hmjd 类型转换在 C 和 C++ 中的行为不一定相同。
-
@Gorpik,我问的唯一原因是似乎没有 C++ 特定代码。如果是 C++,那么有更好的方法来做到这一点(例如使用流)。
-
@hmjd 你说得对,我修改了标签。
标签: c