【发布时间】:2017-02-26 11:39:51
【问题描述】:
我尝试为字符串动态分配内存,但是当我打印出大小时,它显示的是 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
【问题讨论】:
-
使用
strlen(string)而不是sizeof(string),后者提供了保存指向char的指针所需的内存。此外,从strlen返回或由sizeof给出的数字的正确格式说明符是%zu。 -
一些事情:首先请阅读this discussion about casting
malloc(and friends)。其次,当使用realloc时,不要直接赋值给你传递给函数的指针,想想如果realloc返回一个空指针会发生什么。第三,您不为终结者分配空间。第四,用终止符覆盖最后一个字符。 -
错误:
string[i] = '\0';但是string+i不存在(没有为其分配存储空间)。
标签: c sizeof dynamic-memory-allocation