C语言中fp=fopen NULL,C - 为什么在fopen(filename,“r”)之后fp == NULL是true?

这篇博客讨论了一个C程序`countlines()`,该程序旨在计算名为`words`的文件中的行数。作者遇到的问题是调用函数后返回值为0,可能的原因包括文件未找到或缺少读取权限。解决方案包括检查文件路径和使用`perror()`来获取错误信息。博客还提到了代码中对文件结束的检查方法可能存在不足。

这是我所做的代码。

int countlines()

{

// count the number of lines in the file called filename

FILE *fp = fopen("words", "r");

int ch=0;

int lines=0;

if (fp == NULL){

return 0;

}

lines++;

while(!feof(fp))

{

ch = fgetc(fp);

if(ch == '\n')

{

lines++;

}

}

fclose(fp);

return lines;

}

如果我调用countlines(),返回值是0,这是因为他检查fp == NULL,这是真的。

我把文字放在与我的主文件夹相同的文件夹中。可执行文件位于Projectfolder/bin/Debug中。

词是这样的:

"albatros",

"olifant",

"kantklos",

"robijn",

"internet"

的最终目标是,以填补的文件的话的话阵列,而不使用的#include“字”。

2014-12-20

Jasper

+2

可能是文件未找到,可能是您没有读取权限,请使用[stat]检查问题(http://man7.org/linux/man-pages/man2/stat.2。 HTML)。 –

+0

这就是为什么你应该说; if(fp == NULL){perror(“Ups”);返回-1; }'('perror'给你一个理由,而'-1'或者其他负值是OK方式来调用函数调用失败。) –

+0

它的话。我有权限阅读文件 –

在C语言中,下面关于文件的存取方式正确的叙述是 A. 可以顺序存取,也可以随机存取 B. 不可以顺序存取,但可以随机存取 C. 可以顺序存取,但不可以随机存取 D. 只能从文件的开头存取 分数 3 作者 余贞侠 单位 成都信息工程大学 调用fopen()函数,如果打开文件不成功,则函数的返回值是 A. FALSE B. TRUE C. NULL D. EOF 分数 3 作者 张泳 单位 浙大城市学院 函数fscanf()的正确调用形式是( ) 。 A. fscanf(fp, 格式字符串, 输出表列); B. fscanf(格式字符串, 输出表列, fp); C. fscanf(格式字符串, 文件指针, 输出表列); D. fscanf(文件指针, 格式字符串, 输入表列); 分数 3 作者 余贞侠 单位 成都信息工程大学 已知有定义,FILE *fp; char str[] = "Good!"; fp = fopen("filename.dat", "wb"); 将数组str中存放的字符串写到名为filename.dat的二进制文件中。需要的语句是 A. fwrite(str[0], sizeof(char), 1, fp); B. fread(str, sizeof(char), 5, fp); C. fwrite(fp, sizeof(char), 5, str); D. fwrite(str, sizeof(char), 5, fp); 分数 1 作者 cuit 单位 成都信息工程大学 下列关于C语言数据文件的叙述正确的是()。 A. 文件由 ASCII码字符序列组成, C语言只能读写文本文件 B. 文件由二进制数据序列组成, C语言只能读写二进制文件 C. 文件由记录序列组成, 可按数据的存放形式分为二进制文件和文本文件 D. 文件由数据流形式组成, 可按数据的存放形式分为二进制文件和文本文件 分数 1 作者 cuit 单位 成都信息工程大学 下列叙述中正确的是()。 A. C语言中的文件是流式文件, 因此只能顺序存取数据 B. 打开一个已存在的文件并进行了写操作后, 原有文件中的全部数据必定被覆盖 C. 在一个程序中当对文件进行了写操作后, 必须先关闭该文件然后再打开, 才能读到第一个数据 D. 当对文件的读(写)操作完成之后, 必须将它关闭, 否则可能导致数据丢失 分数 1 作者 cuit 单位 成都信息工程大学 在C程序中, 可把整型数以二进制形式存放到文件中的函数是()。 A. fprintf函数 B. fread函数 C. fwrite函数 D. fputc函数 分数 1 作者 cuit 单位 成都信息工程大学 若要打开A盘上user子目录下名为abc. txt的文本文件进行读、写操作, 下面符合此要求的函数调用是()。 A. fopen("A:\user\abc.txt", "r") B. fopen("A:\user\abc.txt", "r+") C. fopen("A:\user\abc.txt", "rb") D. fopen("A:\user\abc.txt", "w") 分数 1 作者 cuit 单位 成都信息工程大学 若以“a+”方式打开一个已存在的文件。则以下叙述正确的是()。 A. 文件打开时, 原有文件内容不被删除, 位置指针移到文件末尾, 可做添加和读操作 B. 文件打开时, 原有文件内容不被删除, 位置指针移到文件开头, 可做重写和读操作 C. 文件打开时, 原有文件内容被删除, 只可做写操作 D. 以上各种说法都不正确 分数 1 作者 cuit 单位 成都信息工程大学 下列程序的输出结果是()。 int main(void) { FILE * fp; int k, n, a[ 6]={1, 2, 3, 4, 5, 6}; fp= fopen("d2.dat", "w"); fprintf(fp, "%d%d%d\n" ,a[0], a[1], a[2]); fprintf(fp, "%d%d%d\n", a[3], a[4], a[5]); fclose(fp); fp = fopen("d2.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d%d\n", k, n); fclose(fp); return 0; } A. 12 B. 14 C. 1234 D. 123456 分数 1 作者 cuit 单位 成都信息工程大学 下面的程序执行后,文件 test中的内容是()。 void fun(char * fname, char *st) { FILE * myf; int i; myf = fopen(fname, "w"); for(i = 0; i<strlen(st); i++) fputc(st i], myf); fclose(my f); } int main(void) { fun("test" , "new world"); fun("test" , "hello, "); return 0; } A. new worldhello, B. hello, C. new world D. hello, rld
最新发布
12-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值