如果
fp_len = ftell(fp);
打印 470
不应该打印“ 471 ”吗? (它打印 8 。可能只是第一行)
char *text = malloc(sizeof(*text) * fp_len + 1);
int text_len;
text_len = sizeof(text);
printf("text-len: %d --- ",text_len);
全:
FILE *fp;
fp = fopen(path, "r");
fseek(fp, 0, SEEK_END);
int fp_len;
fp_len = ftell(fp);
printf("%d---", fp_len);
fseek(fp, 0, SEEK_SET);
char *text = malloc(sizeof(*text) * fp_len + 1);
int text_len;
text_len = sizeof(text);
printf("text-len: %d --- ",text_len);
fread(text, fp_len, 1, fp);
printf("%s",text);
free(text);
答案 0 :(得分:1)
sizeof
给出了类型的大小,而不是字符串长度。
在char *text
的情况下,类型是指针值,64位机器上指针值的大小可能是8。
答案 1 :(得分:0)
sizeof
是C中的运算符而不是函数。它作用于括号内表达式的类型。
它告诉类型的大小。在一般情况下,当您sizeof
表示像char数组那样的
char array[] = "Hello";
sizeof(array);
你得到6,因为array
的类型是char[6]
。
现在,在这种情况下,您正在sizeof
上进行text
。
text
定义为char*
,它是一个指针。系统上的指针是8个字节。所以它给出了8。
尝试使用动态分配缓冲区的sizeof
不起作用。相反,你可以使用
sizeof(*text) * fp_len + 1
因为这是您传递给malloc
的内容。这实际上是text
指向的缓冲区的大小。