C语言中fopen()函数参数传递报错问题求助
问题解决:fopen参数错误及代码修正
核心错误分析
- fopen参数类型不匹配:你用了单引号包裹的
'r',这是字符常量(在C中本质是int类型),但fopen的第二个参数要求是字符串指针(const char*),必须用双引号包裹的字符串字面量"r"。 - sscanf参数错误:
sscanf(str, "%d", *number);里的*number是对指针的解引用,而sscanf需要的是存储整数的内存地址,直接传number即可(因为number本身就是指向目标整数的指针)。
修正后的完整代码示例
#include <stdio.h> #include <stdlib.h> // 函数定义:filename是文件名,number是存储结果的指针 void read_first_line(char *filename, int *number) { // 修正fopen的第二个参数为字符串"r" FILE *fp = fopen(filename, "r"); // 必须检查文件是否成功打开,避免空指针操作 if (fp == NULL) { perror("Failed to open file"); exit(EXIT_FAILURE); } char str[6]; // 5位数字 + 换行符/字符串结束符,长度6足够 // 检查fgets是否读取成功 if (fgets(str, 6, fp) == NULL) { perror("Failed to read line"); fclose(fp); exit(EXIT_FAILURE); } // 修正sscanf的参数,直接传number指针 if (sscanf(str, "%d", number) != 1) { fprintf(stderr, "Failed to convert string to integer\n"); fclose(fp); exit(EXIT_FAILURE); } // 用完文件记得关闭 fclose(fp); }
额外新手提示
- 永远要检查
fopen的返回值:如果文件不存在、权限不足等情况,fopen会返回NULL,直接操作空指针会导致程序崩溃。 fgets读取的内容会包含换行符(如果行长度小于缓冲区),但sscanf的%d格式会自动忽略换行符和空白字符,不影响转换。- 用完文件后必须调用
fclose释放资源,避免资源泄漏。
内容的提问来源于stack exchange,提问作者shari
相关产品推荐
相关产品推荐

