我正在编写一个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++;
}
答案 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