在linux下怎样用fread函数从输入端读取数据,输入的数据数不确定,就是从从终端想输多少就读多少那种

如题所述

用 fgets(buffer, MAXLENTH, stdin)

buffer 为程序里面定义的char类型的数组

MAXLENTH 为buffer的长度 即:sizeof(buffer)

stdin    为标准输入端

这个函数的意思即为, 从标准输入端获得 MAXLENTH 长度的字符串,存入buffer 

fread的原型为  fread(buffer,size,count, fp) 它只能获取二进制文件,如果你想用它 

你就需要在终端输入 000101011010110101010101010101101010011   你看着办吧~~~~~ 

图中为linux中二进制的存储形式

追问

我要输入的字符串多少不确定了,怎样知道从终端输入的字符串大小呢

追答

正是因为 你的字符串不能确定长度 所以在程序里面开辟的空间未知~~ 但buffer的大小不能过大,
如果你实在想用, 还有一种方法 可以用fgetc fputc 结合 输入到一个文件里~ 这样大小就没有限制了~
具体程序如下
#include
#include
#include

int main(void)
{
FILE *fp;
if((fp = fopen("testfile", "w")) == NULL)
{
printf("U CAN NOT OPEN THIS FILE\n");
exit(1);
}

while(!feof(stdin))
{
fputc(fgetc(stdin), fp);
fflush(fp);
}

flcose(fp);
return 0;
}
然后编译下 => ./a.out => 输入你想输入的东西:jlkfjslkfksafjsaf fkljdslk jflkdslkaf jflkdsjal => 然后按 ctrl+c 强制退出 => vim testfile => 看到你刚才输入的内容

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-30
fread()函数就不要想了,根据参数就可以看出,数据量必须由自己提供,不可能达到你所预期的结果,除非是循环读取。
倒是getline()函数可以试试,它能够自动申请所需内存。
注:getline()是gnu扩展函数,不是c++提供的那东东。
相似回答