因此,基本上,我有一个文件指针,该文件的指针在80位数之间,介于0和1之间,我需要将它们变成字符串,然后对其进行处理。
该函数返回NULL
,但我找不到错误原因,因为如果返回NULL
,则表示错误。
FILE *fpr = fopen(path, "r");
FILE *fpw = fopen("code.txt", "w");
char *str = calloc(81, sizeof(char));
if (fpr == NULL || fpw == NULL) {
printf("yikes");
}
if (fgets(str, 80, fpr) != NULL) { //HERE ITS NULL
int p1 = 0;
int p2 = 0;
我真的想通了,我不是很傻,就是没有明显的问题。
答案 0 :(得分:3)
代码片段中有一些问题:
fgets()
,如果fpr
为NULL
,则行为不确定。对每个FILE*
进行单独的测试,打印更明确的错误消息并退出程序。fgets()
,而不是81
,而不是80
。这是更正的版本:
#include <errno.h>
#include <stdio.h>
...
char str[82];
FILE *fpr = fopen(path, "r");
if (fpr == NULL) {
fprintf(stderr, "cannot open input file %s: %s\n", path, strerror(errno));
exit(1);
}
FILE *fpw = fopen("code.txt", "w");
if (fpw == NULL) {
fprintf(stderr, "cannot open output file %s: %s\n", "code.txt", strerror(errno));
exit(1);
}
if (fgets(str, sizeof str, fpr)) {
int p1 = 0;
int p2 = 0;
...
始终测试错误条件并显示明确的错误消息,您可以确保自己无数小时的调试时间。