读取文件的第一行

geeoff 2012-04-18 10:39:39
新手求教

在一个文件的第一行,写有另一个文件的文件名,现在想读出来这个文件名并使用该文件名,我这样写代码可以吗?


……
File *file1;
File *file2;

char s[256];

file1=fopen("XXX.XXX","r+");//打开这个文件
file2=fopen(fgets(s,256,file1),"r+");//读取文件的第一行,并使用

……


编译能够通过,可是在运行的时候报错:
Debug Assertion Failed!
……
File:fgets.c
Line:60

Expression:str !=Null
……

这是怎么回事呢?读取并引用文件第一行不应该使用fgets 吗?
...全文
445 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
geeoff 2012-04-19
  • 打赏
  • 举报
回复
明白了,谢谢


[Quote=引用 11 楼 的回复:]
真相是fgets返回的字符串末尾多了一个'\n'
fp1 = fopen("path.txt", "r");
fgets(s, 256, fp1);
if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;//去掉s末尾的'\n'
fp2 = fopen(s, "r");
[/Quote]
赵4老师 2012-04-19
  • 打赏
  • 举报
回复
真相是fgets返回的字符串末尾多了一个'\n'
fp1 = fopen("path.txt", "r");
fgets(s, 256, fp1);
if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;//去掉s末尾的'\n'
fp2 = fopen(s, "r");

geeoff 2012-04-19
  • 打赏
  • 举报
回复
或许在这里不应该使用fgets函数,除了这个函数,还有其他方法实现这个功能吗?
geeoff 2012-04-19
  • 打赏
  • 举报
回复
感觉应该是这样,\n被读入了,所以打开不成功。
除了fgets还有别的函数可以实现这个功能吗?

[Quote=引用 7 楼 的回复:]
我对上面的说法做了一个测试, 先简历两个文件一个path.txt 里面记录要打开的文件的名字test.c
首先fp1 = fopen("path.txt", "r"); 这个是打开成功的。
然后fp2 = fopen(fgets(s, 256, fp1), "r"); 这个时候就会打开失败。
如果是fp2 = fopen(fgets(s, 7, fp1), "r");这个时候就能打开成功。……
[/Quote]
geeoff 2012-04-19
  • 打赏
  • 举报
回复
用这个方法试了,没有成功

[Quote=引用 1 楼 的回复:]
file2=fopen(fgets(s,256,file1),"r+");
fopen的第一个参数是字符串对吧,而你这里是fgets(s,256,file1)得返回值啊,而不是s,s才是你读到的路径,先fgets(s,256,file1),然后fopen(s, "r+")应该就可以了
[/Quote]
大熊猫侯佩 2012-04-18
  • 打赏
  • 举报
回复
用法是对的,fgets返回的是char *,该函数带有unix风格,便于连接。
AndyZhang 2012-04-18
  • 打赏
  • 举报
回复
file2=fopen(fgets(s,256,file1),"r+");
fopen的第一个参数是字符串对吧,而你这里是fgets(s,256,file1)得返回值啊,而不是s,s才是你读到的路径,先fgets(s,256,file1),然后fopen(s, "r+")应该就可以了
eagle_ice 2012-04-18
  • 打赏
  • 举报
回复
我对上面的说法做了一个测试, 先简历两个文件一个path.txt 里面记录要打开的文件的名字test.c
首先fp1 = fopen("path.txt", "r"); 这个是打开成功的。
然后fp2 = fopen(fgets(s, 256, fp1), "r"); 这个时候就会打开失败。
如果是fp2 = fopen(fgets(s, 7, fp1), "r");这个时候就能打开成功。 我猜测 是应为fgets 将\n 也读进了 buf 这样导致的打开失败
eagle_ice 2012-04-18
  • 打赏
  • 举报
回复
首先解释一下 fgets
char *fgets(char *str, int num, FILE *fp);
操作成功时返回str指针,失败时返回NULL
按照逻辑来说 fopen(fgets(s,256,file1),"r+"); 调用 没有问题。 但是出现了打不来文件的问题。 求解释
gaoyang2 2012-04-18
  • 打赏
  • 举报
回复
fopen的第一个参数是char * filename, 你给的是 fgets 的返回值 不行。。。。
deicide888 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

用法是对的,fgets返回的是char *,该函数带有unix风格,便于连接。
[/Quote]
+1,请具体说说啊
疯疯癫癫 2012-04-18
  • 打赏
  • 举报
回复
+1 楼主试试
[Quote=引用 1 楼 的回复:]
file2=fopen(fgets(s,256,file1),"r+");
fopen的第一个参数是字符串对吧,而你这里是fgets(s,256,file1)得返回值啊,而不是s,s才是你读到的路径,先fgets(s,256,file1),然后fopen(s, "r+")应该就可以了
[/Quote]

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧