没有编译器警告明显的段错误

时间:2017-09-07 14:49:44

标签: c gcc segmentation-fault clang gcc-warning

我很惊讶这个编译没有任何警告:

int main()
{ 
    *"abc" = '\0';
}

gcc main.c -Wall -Wextraclang main.c -Weverything

为什么没有这个警告?有什么办法可以解决分段错误吗?

1 个答案:

答案 0 :(得分:4)

您可以使用-Wwrite-strings在GCC中获取此代码的警告。来自GCC documentation

  

-Wwrite串

     

编译C时,给字符串常量类型const char [length],这样将一个地址复制到一个非const char *指针就会收到警告。这些警告将帮助您在编译时找到可以尝试写入字符串常量的代码,但前提是您在声明和原型中使用const非常小心。否则,这只会​​令人讨厌。这就是为什么我们没有让-Wall请求这些警告。

     

编译C ++时,警告有关从字符串文字到char *的弃用转换。对于C ++程序,默认情况下会启用此警告。

“有什么办法不能引起分段错误?” - >修改字符串litteral是未定义的行为。所以任何事情都可能发生,包括不分裂。