0

我在一个遗留项目中发现了以下代码,这似乎会造成一些麻烦:

for( ; *str; ++str )
    *str = tolower(*str);

问题是,我们得到了一个 SIGSEGV,此时 tolower() 的结果应该写回 *str 。这是我使用 printf() 调试和 stracktrace 产生的结果,因为我们在这里使用 JNI,因此将调试器附加到 C 库对我们不起作用。

如果在 linux 上使用 gcc 编译,代码会失败。在 Windows 上运行相同的东西(CMake 用于此跨平台设置)工作正常。

我在哪里可以找到这种情况的原因?任何提示表示赞赏:)

谢谢 - 马库斯

4

1 回答 1

2

字符串文字是不可修改的:

char blop[] = "modifiable string";
char *bla = "non-modifiable string";

*blop = tolower(*blop); // OK
*bla = tolower(*bla);   // not OK, modifying a string literal
于 2012-04-10T09:29:04.067 回答