gpt4 book ai didi

c++ - 如何使用 fread 按值读取文件?

转载 作者:太空狗 更新时间:2023-10-29 22:58:11 24 4
gpt4 key购买 nike

我使用fwrite 来存储一些数据,现在我正在尝试使用fread 从txt 文件中读取数据进行处理。我想单独阅读这些值,但我不知道你会怎么做。这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>

int main ()
{
FILE * pFile;
long lSize;
unsigned short * buffer;
size_t result;

pFile = fopen ( "myfile.txt" , "rb" );

// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);

// allocate memory to contain the whole file:
buffer = (unsigned short *) malloc (sizeof(unsigned short)*lSize);

// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);

printf("%uz\n", result);

// terminate
fclose (pFile);
free (buffer);
return 0;
}

上面的程序编译得很好,但是当我用 ./a.out 运行它时,我得到了一个段错误。当我用 sudo ./a.out 运行它时,我没有遇到段错误,但没有打印出来。知道我可以做些什么来解决它吗?

最佳答案

我看到的问题:

分配比需要更多的内存

之后

lSize = ftell (pFile);

lSize 设置为文件中的字符数,而不是 unsigned short 的数量。因此,你需要

buffer = malloc(lSize);

参见 Do I cast the result of malloc? .如果您使用的是 C++ 编译器(正如您的 C++ 标记所暗示的那样),则需要转换 malloc 的返回值。

错误的格式说明符

printf("%s\n", result);

使用错误的格式说明符打印result。你需要使用

printf("%zu\n", result);

该行很可能是您所看到的段错误的罪魁祸首。


逐一阅读对象

你当然可以使用:

size_t count = lSize/sizeof(short);
for ( size_t i = 0; i < count; ++i )
{
unsigned short number;
result = fread (&number, sizeof(unsigned short), 1, pFile);
}

您还可以使用:

size_t count = lSize/sizeof(short);
for ( size_t i = 0; i < count; ++i )
{
result = fread (buffer+i, sizeof(unsigned short), 1, pFile);
}

关于c++ - 如何使用 fread 按值读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com