我正在尝试编写一个读取文件大小的代码,然后相应地分配缓冲区大小。
由于某种原因,我的缓冲区大小始终不会改变其4字节。
为什么我的缓冲区没有分配等于读取文件大小的内存的任何提示?
#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE *file,*fp;
file = fopen("file.txt", "r");
fp = fopen( "outputnew.txt" , "w" );
long lSize;
fseek(file, 0, SEEK_END);
lSize = ftell(file);
fseek(file, 0, SEEK_SET);
char *buffer = (char*) malloc(sizeof(char)*lSize);
printf("%d\n",sizeof(buffer));
return(0);
}
答案 0 :(得分:2)
malloc
正在运行,但您对缓冲区大小的测试是错误的。 sizeof(buffer)
返回变量buffer
的大小,即char *
。在32位平台上,这将始终为4个字节。你想要的是buffer
指向的堆分配的大小;没有简单的方法可以归还。但是,您的代码是正确的,因为它将分配一个大小为sizeof(char)*lSize
答案 1 :(得分:1)
你的缓冲区没问题。从C编译器的角度来看buffer
是char *
,因此sizeof(buffer)
是sizeof(char *)
又称4.只要malloc
返回有效(非空)地址你没事。
答案 2 :(得分:1)
malloc()通常永远不会失败。或者,如果要检查malloc()是否失败,请检查存储在缓冲区中的返回地址。
如果(缓冲== NULL) printf(“malloc()失败\ n”);
sizeof(buffer)返回指针变量缓冲区的大小。它将在x86平台上为4个字节,在x64平台上为8个字节。