(Linux) "Segmentation fault (core dumped)" 在将字符指针传递到 c 中的函数时



每次尝试这个函数时,我总是遇到错误"分段错误(核心转储(":

int CheckFile(char * filename){
FILE * bd = fopen(filename, "r");
if(bd == NULL){
fclose(bd);
return -1;
}else{
fclose(bd);
return 0;
}
}

函数调用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_FILE_NAME "file.txt"
int CheckFile(char * filename);
int main(int argc, char ** argv[]){
char * name_of_file == NULL;
if(argc > 1){
printf("argc > 1n");
for(i=0;argc>i;i++){
if(strcmp(argv[i],"-f")==0){
name_of_file = argv[i+1];
if(CheckFile(name_of_file) != 0)
printf("Can't find the file "%s".", name_of_file);
}
if(name_of_file == NULL){
if(CheckFile(DEFAULT_FILE_NAME) != 0);
printf("Can't find the default file ""DEFAULT_FILE_NAME"".");
}
}

通过我的故障排除,我会说问题出在"char * 文件名"上,但找不到解决这个问题的方法。有人可以帮我一把吗?我会很感激的。

这具有未定义的行为,应该预期会崩溃或更糟:

if(bd == NULL){
fclose(bd);

空指针不是fclose的有效参数。只需删除呼叫即可fclose那里。

代码无法正确编译。main()的定义是错误的:

int main(int argc, char ** argv[]) {

它需要

int main(int argc, char **argv) {

还有这个

char * name_of_file == NULL;

需要

char * name_of_file = NULL;

因为我们在这里进行初始化,而不是比较。

另外,该打印也不适合我:

printf("Can't find the file "%s".", name_of_file);

似乎您的转义序列/格式说明符以某种方式被破坏了。尝试

printf("Can't find the file %s.", name_of_file);

相反。

接下来,未定义i。您是否将其作为未在代码段中显示的全局变量?无论哪种方式,您都可以将其放在这里:

for (int i = 0; argc > i; i++) {

而不是

for(i=0;argc>i;i++){

此外,此处的if不执行任何操作:

if(CheckFile(DEFAULT_FILE_NAME) != 0);

由于末尾的分号,您可能希望将其删除。

最后但并非最不重要的一点是,main函数末尾缺少两个}

调试代码时似乎遇到了问题。请考虑使用将显示编译错误的 IDE。此外,如果文件没有打开(fopen返回NULL(,则不应尝试fclose文件。

最新更新