使用tolower()将char * string转换为小写会导致SIGSEGV - 出了什么问题?

时间:2012-04-10 09:16:01

标签: c java-native-interface sigsegv

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

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

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

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

我在哪里可以找到原因?任何提示赞赏:)

谢谢你 - 马库斯

1 个答案:

答案 0 :(得分:2)

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

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

*blop = tolower(*blop); // OK
*bla = tolower(*bla);   // not OK, modifying a string literal