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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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 => 看到你刚才输入的内容

参考技术A fread()函数就不要想了,根据参数就可以看出,数据量必须由自己提供,不可能达到你所预期的结果,除非是循环读取。
倒是getline()函数可以试试,它能够自动申请所需内存。
注:getline()是gnu扩展函数,不是c++提供的那东东。

matlab 中关于fread函数的用法

用fread打开一个文件时,需要不需要把被打开文件放在某个特定位置?

fread函数在MATLAB中的功能:fread函数可从文件中读取二进制数据

用法:

A = fread(fid, count)

A = fread(fid, count, precision)

其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

扩展资料:

fread函数在PHP中:

(PHP 4, PHP 5)

fread:读取文件(可安全用于二进制文件)

stringfread( int handle, int length )

fread()从文件指针handle读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。

在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 'b'。

当从网络流或者管道读取时,例如在读取从远程文件或popen()以及proc_open()的返回时,读取会在一个包可用之后停止。这意味着应该如下例所示将数据收集起来合并成大块。

如果只是想将一个文件的内容读入到一个字符串中,用file_get_contents(),它的性能比上面的代码好得多。

参考资料:百度百科-fread函数

参考技术A “fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size: 不指定 :到尾返回读。
N : 读出N个数据,构成列向量。
inf : 读出fid指向的打开的文件的全部数据。
[M,N] : 读出N个数据,构成列向量,填入M*N矩阵
precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时位。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'char' 'char*l' 8 位,字符型
'uchar' 'unsigned char' 8 位
'schar' 'signed char' 8 位,字符型
'int8' 'integer*1' 8 位,整型数
'intl6' 'integer*2' 16 位,整型数.
'int32' 'integer*4' 32 位,整型数.
'int64' 'integer*8' 64 位,整型数
'uint8' 'integer*l' 8 位
'uintl6' 'integer*2' 16 位
'uint32' 'integer*4' 32 位
'uint64' 'integer*8' 64 位
'float32' 'real*4' 浮点数, 32 位
'float64' 'real*8' 浮点数, 32 位

以下precision(精度)将不保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'short' 'short' 16 位,整型数
'int' 'int' 32 位,整型数
'long' 'long' 32 (64) 位,整型数
'uShort' 'Unsigned short' 16 位
'uint' 'Unsigned int' 32 位
'ulong' 'unsigned long' 32 (64) 位
'float' 'float' 浮点数, 32 位
'double' 'double' 浮点数, 64 位
以下precision(精度)规定读出指定的体积n。
'bitN' N位,整型数 1<=N<=64
'ubitN' N位, 1<=N<=64
参考技术B 文件必须在Matlab可以搜索的路径中。
一般为提高速度,直接指定位置,比如指定C盘文件myfile
fid=fread('C:\myfile','r')本回答被提问者采纳
参考技术C 当前目录下也是个选择

以上是关于在linux下怎样用fread函数从输入端读取数据,输入的数据数不确定,就是从从终端想输多少就读多少那种的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中fread()读出的数据怎么和原来不一致了?

matlab 中关于fread函数的用法

C语言中如何使用fread

C语言中fread函数,当文件流缓冲中剩余长度小于需要读取的长度时的问题

在 C 中使用 fread 从标准输入缓冲读取

fread()函数如何判断是不是到文件末尾?