fread的误区(以文本格式打开文件)

本文介绍了一种使用C语言从文本文件中读取数据的方法,并对比了两种不同的内存分配方式。一种方法是在读取文件内容后为字符串显式添加终止符,另一种则是直接利用读取的数据长度构造字符串。此外,文章还提到了优快云平台的代码排版问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一段代码,在读文本文件的时候,第二行可以省略,第四五行一定要有。否则后面代码有坑。(FK微软)
void* buffer = malloc(nLength + 2); //maybe wchar, so + 2
memset(buffer, 0, nLength + 2);
ret = fread(buffer, 1, nLength, m_pFile);
((char*)buffer)[ret] = 0;
((char*)buffer)[ret + 1] = 0;
std::string s = (char*)buffer;


后来干脆这么写
void* buffer = malloc(nLength);
ret = fread(buffer, 1, nLength, m_pFile);
std::string s((const char*)buffer, ret);



===========服了优快云的代码排版格式了=========

fread函数是C语言中用于从文件中读取数据的标准库函数之一。它可以以无符号数的形式读取文件内容。以下是fread函数的一些关键点和使用方法: 1. 函数原型: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 2. 参数说明: - ptr:指向存储读取数据的内存块的指针。 - size:每个数据项的字节数。 - nmemb:要读取的数据项的数量。 - stream:指向FILE对象的指针,该FILE对象指定了要读取的输入流。 3. 返回值: 返回实际读取的数据项数量。 4. 以无符号数读取文件的方法: - 使用"unsigned char"或"unsigned int"等无符号类型作为读取缓冲区。 - 确保缓冲区大小足够容纳读取的数据。 5. 示例代码: ```c #include <stdio.h> int main() { FILE *file; unsigned char buffer[100]; size_t bytes_read; file = fopen("example.bin", "rb"); if (file == NULL) { perror("Failed to open file"); return 1; } bytes_read = fread(buffer, sizeof(unsigned char), 100, file); if (bytes_read == 0) { perror("Failed to read from file"); } else { printf("Read %zu bytes from file\n", bytes_read); // 处理读取的数据 } fclose(file); return 0; } ``` 在这个示例中,我们使用"unsigned char"类型的数组来存储读取的数据。这种方式确保数据以无符号数的形式存储和读取。 使用fread以无符号数读取文件的好处包括: - 保留了数据的原始位模式。 - 避免了在有符号数表示中可能出现的符号扩展问题。 - 适用于读取二进制数据或需要精确控制位模式的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值