我不明白为什么会出现 "Segmentation fault (core dumped)" 错误
I don't understand why I am getting "Segmentation fault (core dumped)" error
我正在编写一个在文件中搜索字符串的 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++;
}
在你的代码中
strcpy(search_string, argv[1]);
在您尝试写入由 search_string
指向的单元化内存时调用 undefined behavior。由于您没有明确初始化 search_string
,指针(指针值)是不确定的,很可能它指向某个无法从您的程序访问的内存位置。因此指针本质上指向无效内存位置。
您需要先为 search_string
分配内存,然后才能 复制 到其中。
否则,在执行strcpy()
.
之前,使search_string
成为一个足够长的数组,可以容纳argv[1]
的内容(包括空终止符)
您正在使用 search_string
而不进行初始化,而不是:
strcpy(search_string, argv[1]);
你应该使用:
search_string=strdup(argv[1]);
看:
strcpy vs strdup
我正在编写一个在文件中搜索字符串的 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++;
}
在你的代码中
strcpy(search_string, argv[1]);
在您尝试写入由 search_string
指向的单元化内存时调用 undefined behavior。由于您没有明确初始化 search_string
,指针(指针值)是不确定的,很可能它指向某个无法从您的程序访问的内存位置。因此指针本质上指向无效内存位置。
您需要先为 search_string
分配内存,然后才能 复制 到其中。
否则,在执行strcpy()
.
search_string
成为一个足够长的数组,可以容纳argv[1]
的内容(包括空终止符)
您正在使用 search_string
而不进行初始化,而不是:
strcpy(search_string, argv[1]);
你应该使用:
search_string=strdup(argv[1]);
看: strcpy vs strdup