C - 使用strcmp()时的段错误

时间:2016-04-03 21:33:49

标签: c segmentation-fault gdb strcmp

使用strcmp()时遇到段错误。我尝试使用gdb进行调试,当我运行它(没有参数)时,我得到一个段错误。当我回溯时,它表示段错误在第20行,但我无法弄清楚为什么它是segfaulting。 strcmp()语句在第20行。我将在帖子中包含第0-21行,但如果需要可以添加更多。

使用run命令时的segfault语句如下:

Program received signal SIGSEGV, Segmentation fault.
__strcmp_sse2 () at ../sysdeps/x86_64/multiarch/../stcmp.S:213
213 ../sysdeps/x86_64/multiarch/../strcmp.S: No such file or directory.

然后我做了backtrace并得到了这个:

#0 __strcmp_sse2 () at ../sysdeps/x86_64/multiarch/../strcmp.S:213
#1 0x0000000000400aa6 in main (c=1, v=0x7fffffffead8) at myls.c:20

以下是第0-21行的代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <pwd.h>
#include <string.h>
#include <grp.h>

int main(int c, char *v[])
{
    DIR *directory = NULL;
    strut direct *dir_pointer = NULL;
    int i = 0;
    char cwd[1024];

    if(strcmp(v[1], "-i") == 0){ //line 20, where the segfault happens
        ...

任何提示/帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

你是在没有参数的情况下调用(c = 1)并访问给予程序的第一个参数(就好像c是2)..

我建议你阅读这个答案

What does int argc, char *argv[] mean?

答案 1 :(得分:0)

您要么不将参数传递给程序,要么在if语句之后直接进行段错误。 strcmp有效。

编辑:刚刚意识到你并没有在没有参数的情况下传递它。如果没有v[1]

,您就会引用v[1]