【发布时间】:2025-12-21 23:20:07
【问题描述】:
我写了一个程序,它根据这种格式解析一个字符串:
somethingsomething:number:
在我的电脑上,这个程序可以完美运行。
但是,一旦我上传了代码并在学校的计算机上编译了它,strtok() 就会有不同的行为。
例如,使用此字符串:p2test/f4.txt:1:,在我的计算机上,第一个令牌将是 p2test/f4.txt。但是,在学校的计算机上,令牌最终为 p2test/f4.t。
这里是代码段:
char *token;
char delim[1] = ":";
if ((token = strtok(tmp_string, delim)) != NULL) {
...
}
在这里,tmp_string 将是 p2test/f4.txt:1:。
这里是我电脑的编译器版本:gcc version 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
这里是我学校的编译器版本:gcc version 4.8.1 20130909 [gcc-4_8-branch revision 202388](SUSE Linux)
【问题讨论】:
-
未定义的行为因计算机而异,请发布其余代码,
tmp_string是如何生成的。 -
char delim[1] = ":";这个编译好了吗?该字符串文字中有两个字符,但您声明了一个 1 个字符的数组。另一个字符是空终止符。 -
@PaulMcKenzie 哦,你是对的!这很奇怪,因为我也打开了所有警告和迂腐。
-
@PaulMcKenzie:这是合法的 C(但不是 C++)。
-
@PaulMcKenzie 我完全错过了......