每次尝试这个函数时,我总是遇到错误"分段错误(核心转储(":
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
文件。