我在遗留项目中发现以下代码似乎会造成一些麻烦:
for( ; *str; ++str )
*str = tolower(*str);
问题是,我们得到一个SIGSEGV,此时tolower()的结果应写回* str。这是我使用printf()调试和stracktrace产生的结果,因为我们在这里使用JNI,因此将调试器附加到C库对我们来说不起作用。
如果在linux上用gcc编译代码就会失败。在Windows上运行相同的东西(CMake用于这种跨平台设置)工作正常。
我在哪里可以找到原因?任何提示赞赏:)
谢谢你 - 马库斯答案 0 :(得分:2)
字符串文字是不可修改的:
char blop[] = "modifiable string";
char *bla = "non-modifiable string";
*blop = tolower(*blop); // OK
*bla = tolower(*bla); // not OK, modifying a string literal