我不明白为什么我会收到“Segmentation fault(core dumped)”错误

时间:2016-02-09 21:36:40

标签: c pointers segmentation-fault argv strcpy

我正在编写一个C程序,用于搜索文件中的字符串。当我从命令行编译并执行程序时,我得到了分段错误错误。我知道这个错误意味着我无法访问我试图写入的内存,但我不知道这在我的程序中是如何发生的。以下是发生错误的main函数中的代码段:

int num_of_arguments = argc;
char *filename = argv[2];
char *search_string;

strcpy(search_string, argv[1]);

int i = 0;
while (search_string[i]) {
    tolower(search_string[i]);
    i++;
}

2 个答案:

答案 0 :(得分:4)

在您的代码中

search_string
当您尝试写入由search_string指向的单位化内存时,

会调用undefined behavior。由于您未明确初始化search_string,因此指针(指针值)是不确定的,并且很可能指向某个无法从您的程序访问的内存位置。因此,指针实际上指向无效的内存位置。

您需要先将内存分配到search_string,然后才能复制

否则,在执行argv[1]之前,使strcpy()数组具有足够的长度,以保存msg_to_user的内容(包括空终止符)。

答案 1 :(得分:0)

您正在使用search_string而不进行初始化,而不是:

strcpy(search_string, argv[1]);

您应该使用:

search_string=strdup(argv[1]);

查找: strcpy vs strdup