0

test.bin 的大小为 7,01,760 字节。我正在尝试在缓冲区 bufferPointer 中将此文件中的日期读取为“短”。

short * bufferPointer=NULL; 
// ==> ANSWER WAS ADDING: bufferPointer = ( short*)malloc(350880); <==
FILE *fp=fopen(" test.bin","rb");
fread(bufferPointer,sizeof(short),350880 ,fp); 
fclose(fp);

我在 fread() 处收到调试断言失败。为什么?

MSVC2010,Windows-7-32 位

4

4 回答 4

6

您为缓冲区分配了 350880 个字节,但尝试读取 350880 个短裤。尝试

bufferPointer = malloc(350880 * sizeof *bufferPointer);

(请注意,强制转换 malloc 不是必需的,并且不赞成,因为它可以隐藏错误。)

您还应该检查 malloc、fopen 和 fread 调用是否有错误。

于 2012-11-13T05:44:43.187 回答
2

您应该首先bufferPointer使用malloc. 然后您可以使用fread从文件中读取到该缓冲区。

于 2012-11-13T05:37:58.710 回答
1

sgar91 是正确的。你试一试:

short * bufferPointer = (short *)malloc(350880*sizeof(short)); 
if (bufferPointer == NULL)
{
  // TODO: error handling
}

FILE *fp = fopen("test.bin", "rb");
if (fp == NULL)
{
  // TODO: error handling
}

fread(bufferPointer, sizeof(short), 350880, fp); 
fclose(fp);
于 2012-11-13T05:44:14.327 回答
1

试试这个

short bufferPointer[350880]; 
FILE *fp=fopen("test.bin","rb");
fread(bufferPointer,sizeof(short),350880 ,fp); 
fclose(fp);

这里的东西很少

1)您不能以这种方式直接使用指针。像上面那样静态分配内存或使用 malloc 动态分配

2) 字符串“test.bin”的开头有一个空格。删除前导空格。

3)即使上述方法有效,也可能不会给您带来有意义的结果。fread读取由 . 编写的内容fwrite。即文件是使用fwrite写作shorts创建的吗?如果没有,您阅读的内容可能毫无意义。

于 2012-11-13T05:47:09.217 回答