当我运行以下代码时:
#include <stdio.h>
int main(int argc, char *argv[])
{
int p = 0;
p = strcmp(NULL,"foo");
return 0;
}我得到了分段错误。echo $?说是139。但是当我跑的时候
#include <stdio.h>
int main(int argc, char *argv[])
{
int p = 0;
strcmp(NULL,"foo"); // Note removed assignment
return 0;
}我没有得到任何分割错误。有没有人能给我点光?
这是我的gcc信息:
> gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-8)发布于 2011-02-08 20:22:33
您可能在编译时使用了优化选项。由于第二个代码片段中的strcmp()结果被忽略,编译器消除了这个函数调用,这就是程序不会崩溃的原因。只有因为strcmp()是一个内部函数,编译器才会意识到这个函数没有任何副作用,才能消除此调用。
发布于 2011-02-08 20:22:17
您需要:
strcmp(),您需要<string.h>.strcmp(),因为它不会对此进行保护,而是会取消对该指针的引用,从而在您的程序中导致未定义的行为。发布于 2011-02-08 20:20:44
您正在做的事情是未定义的。strcmp需要指向以null结尾的字符串的有效指针。
NULL不是指向以null结尾的字符串的指针。
https://stackoverflow.com/questions/4932848
复制相似问题