返回信息流请教各位大神。在不知道文件大小的情况下,读取并显示。编完代码后显示时在最后总会出现两个乱码。请问是什么原因。代码如下 txt文件可以自己瞎写一个。求教,求教!!
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * pFile;
long lSize;
char * buffer;
size_t result;
char filename[80];
printf("\n请输入文件名");
gets(filename);
if((pFile = fopen ( filename , "r"))==NULL)
{
printf("文件打开失败");
exit(1);
}
fseek (pFile , 0L , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL)
{fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize)
{fputs ("Reading error",stderr); exit (3);}
/* 这时候全部的文件数据都保存到了 buffer 里,你可以根据需要进行处理 */
// terminate
printf("\n%s",buffer);
fclose (pFile);
free(buffer);
system("pause");
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #90862同步于 2016/3/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教关于动态读取txt文件的问题
zczz
2016/3/30镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
1. 请用"rb"打开。文本文件有“行尾”之类的问题。所以干脆就“原封不动地输出”好了,不要在意它是不是文本文件了。
2. 并不是所有的文件都有终点。所以,不必一开始就分配那么大的缓冲区。缓冲区开4096字节(一般等于一个page)也就够了。
3. 不一定一次性读进来。可以一边读一边写。这就是缓冲区的用途。
4. 为什么不用Python呢?
with open("foo.txt", "rb") as f:
content = f.read()
with open("bar.txt", "rb") as g:
g.write(content)
非常感谢。我只是做个实验,不会用c++,更不会那个了。非常感谢!
【 在 nuanyangyang 的大作中提到: 】
: 1. 请用"rb"打开。文本文件有“行尾”之类的问题。所以干脆就“原封不动地输出”好了,不要在意它是不是文本文件了。
: 2. 并不是所有的文件都有终点。所以,不必一开始就分配那么大的缓冲区。缓冲区开4096字节(一般等于一个page)也就够了。
: 3. 不一定一次性读进来。可以一边读一边写。这就是缓冲区的用途。