我想读取文本文件的一行,将其保存到缓冲区,通过 udp 套接字发送缓冲区,然后去读取第二行,依此类推..
到目前为止,由于我知道要从文本文件中读取的文本的数据类型,所以我一直在使用
fscanf()
从文本文件中读取每一行。但是现在我不知道数据类型,所以我不能再使用这个函数了。有没有其他方法可以逐行读取文本文件。
注意: 每行的长度可能会有所不同。
我想读取文本文件的一行,将其保存到缓冲区,通过 udp 套接字发送缓冲区,然后去读取第二行,依此类推..
到目前为止,由于我知道要从文本文件中读取的文本的数据类型,所以我一直在使用
fscanf()
从文本文件中读取每一行。但是现在我不知道数据类型,所以我不能再使用这个函数了。有没有其他方法可以逐行读取文本文件。
注意: 每行的长度可能会有所不同。
在不知道数据类型的情况下,您永远无法知道要读入变量的内容...让我们看看,您提到每行的长度可能会有所不同,对吗?所以我们可以假设您的文本文件包含...文本。也就是说,数字 128 不会由单个整数表示,而是由您将读取然后解析为整数的三个字符表示。
也就是说,除了构建一个解析器之外没有很多选择(你阅读每一行并尝试根据你读过的字符猜测它是什么,比如说,只有数字吗?只有数字但有一个点?只有 az 字符吗?,它们都是吗?)这不是 100% 可靠的,或者只是尝试总是事先知道数据类型(例如,保存从每一行读取的第一个字符作为数据类型写入文件时)。
如果您的文本文件不是真正的文本文件,而是二进制模式,那么情况就大不相同了。如果是这样的话……好吧,除了事先知道数据类型之外别无他法。
这是我发现以二进制形式读取数据的便捷代码
FILE *fp;
fp=fopen("c:\\test.bin", "r");
char *x = new char[10];
//size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
fread(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);