fopen的问题?

bomeng_21it 2009-11-17 01:21:26
我想fopen();打开一个文件 ,但是
fopen(buf,“r+”);
buf文件名是fgets(buf,20,stdin)读过来的,
比如我在终端输入了一个文件名为test.c,
fopen无法打开,怎么转换一下呢?
让fopen能打开test.c文件 ???????

...全文
562 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbitlzx 2009-11-17
  • 打赏
  • 举报
回复

FILE* pf = fopen( "c:\\tstbuf.txt", "a+" );
if( pf )
{
pf = fprintf( pf, "%s", buf );
fclose( pf );
}

然后到文件tstbuf.txt里看看到底输出的是什么,后面有没有回车什么的
AlanWillaims 2009-11-17
  • 打赏
  • 举报
回复
32楼看到这个还不明白吗? 把后面的回车去了.
bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 alanwillaims 的回复:]
printf("您要下载的文件名:|%s|\n",buf);

如何?
[/Quote]

这是什么意思啊?
您要下载的文件名:|test.c
|
zhangwenlang 2009-11-17
  • 打赏
  • 举报
回复
多试试几次
zhangwenlang 2009-11-17
  • 打赏
  • 举报
回复
多试试几次
AlanWillaims 2009-11-17
  • 打赏
  • 举报
回复
printf("您要下载的文件名:|%s|\n",buf);

如何?
bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 hqin6 的回复:]
C/C++ code/* fgets exmaple*/
#include<stdio.h>int main()
{
FILE* pFile;charstring [100];

pFile= fopen ("myfile.txt" ,"r");if (pFile== NULL) perror ("Error opening file");else {
fgets (string ,100 , pFile);
puts (string);
fclose (pFile);
}return0;
}



lz
你的
printf("您要下载的文件名:%s\n",buf);
打印出来的结果是??
[/Quote]
您要下载的文件名:test.c
AlanWillaims 2009-11-17
  • 打赏
  • 举报
回复
buf 里会不会有个回车或者空格? strlen 的结果?
太乙 2009-11-17
  • 打赏
  • 举报
回复
/* fgets exmaple */
#include <stdio.h>

int main()
{
FILE * pFile;
char string [100];

pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
fgets (string , 100 , pFile);
puts (string);
fclose (pFile);
}
return 0;
}



lz
你的
printf("您要下载的文件名:%s\n",buf);
打印出来的结果是??




bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 yutaooo 的回复:]
那么,还是检查buf里是什么东西吧。尤其是,'\0'是否在'c'后。
[/Quote]
客户端输入的test.c,buf里的内容也是test.c
但是就是不行,直接写fp_src = fopen("test.c","r+"); 这样就可以
yutaooo 2009-11-17
  • 打赏
  • 举报
回复

那么,还是检查buf里是什么东西吧。尤其是,'\0'是否在'c'后。
shellfish567 2009-11-17
  • 打赏
  • 举报
回复
char *ch_in/* *ch_out*/;
//word8 *bit_out[8];
char ch_out[10000];
ch_in=(char *)malloc(file_size);
//ch_out=(char *)malloc(file_size+16);
//bit_out[8]=(word8 *)malloc((file_size+16)*8);
while(!feof(file_in)){
ch_in[i++]=fgetc(file_in);
}
ch_in[--i]='\0';
encrypt2(ch_in,key,128,ch_out);

在这里的话,我希望输出结果为动态分配的,而不是固定的,可是malloc申请的空间得不到正确结果
bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yutaooo 的回复:]
LZ,test.c 这个文件是否存在?
[/Quote]
存在
bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
buf里接收的内容是正确的,别的我也都测过了
shellfish567 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 shellfish567 的回复:]
在这句之前加个调试语句,过着gdb调试下看看
[/Quote]
汗。。。。还是过去看看,malloc了free掉全世界的小朋友都知道。。。
yutaooo 2009-11-17
  • 打赏
  • 举报
回复

LZ,test.c 这个文件是否存在?
AlanWillaims 2009-11-17
  • 打赏
  • 举报
回复
打印一下 buf 和 errno 的值看看吧. 你这样写恐怕是不安全的. 一般 read socket 之后都要检查一下返回值, 默认的设置下, socket 有可能收了一半就返回了, 还有可能已经断开了. 我不太清楚 fdopen 封装后它能否正确处理这些问题.

建议你先收到一个缓冲区里, 然后用 sscanf 之类的格式化函数处理.
bomeng_21it 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 shellfish567 的回复:]
好清晰的代码。。。。。。。。。。。。。。楼上那些有空去看看我的问题啊!malloc申请的空间与数组空间使用上有什么差别问题,标题是这个,代码贴上了
[/Quote]
数组在栈上申请的,用完不用free,malloc在堆上申请的,用完后必须自己free了,要不会造成内存泄露,后果很严重。
shellfish567 2009-11-17
  • 打赏
  • 举报
回复
在这句之前加个调试语句,过着gdb调试下看看
shellfish567 2009-11-17
  • 打赏
  • 举报
回复
你检查下是否正确的到buf
加载更多回复(14)

69,371

社区成员

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

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