sizeof(text)不等于:fp_len + 1

时间:2017-07-07 09:27:41

标签: c

如果

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);

2 个答案:

答案 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指向的缓冲区的大小。