在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 => 看到你刚才输入的内容
倒是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函数从输入端读取数据,输入的数据数不确定,就是从从终端想输多少就读多少那种的主要内容,如果未能解决你的问题,请参考以下文章