动态内存分配到字符串,给出不正确的大小

时间:2017-02-26 11:39:51

标签: c sizeof dynamic-memory-allocation

我尝试动态地为字符串分配内存,但是当我打印出大小时,它显示4而不是应该分配的(11 + 1)字节。为什么会这样?字符串打印出来就好了。

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

int main(){
char c, *string;
int i=0, a=1;

printf("\nEnter the string : ");

string = (char *) malloc (sizeof(char));
while(c != '\n'){
    c = getchar();

    string = (char *) realloc (string, sizeof(char) * a);

    string[i] = c;

    a++, i++;
}
string[i] = '\0';

puts(string);

printf("\n%d", sizeof(string));

}

Input  : Sample Text
Output : 
    Sample Text
    4

2 个答案:

答案 0 :(得分:0)

sizeof为您提供了char指针的大小,在您的平台上为4。

答案 1 :(得分:0)

sizeof运算符返回&#34; size&#34;变量的变量,在这种情况下是一个指针。在32位系统上,指针是4个字节,所以这是打印的。您想使用strlen(char*)函数,该函数查看包含指针所在字符串的内存。此函数将计算它在最终0终结符字节之前看到的字节数。