动态内存分配给字符串,给出不正确的大小
Dynamic Memory allocation to string, gives out incorrect size
我尝试为字符串动态分配内存,但是当我打印出大小时,它显示 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] = '[=10=]';
puts(string);
printf("\n%d", sizeof(string));
}
Input : Sample Text
Output :
Sample Text
4
sizeof 为您提供 char 指针的大小,在您的平台上为 4。
sizeof 运算符 returns 变量的 "size",在本例中是一个指针。在 32 位系统上,指针是 4 个字节,所以这是打印的内容。您想要使用 strlen(char*)
函数,它查看包含指针指向的字符串的内存。此函数将计算它看到的字节数,直到最后一个 0
终止符字节。
我尝试为字符串动态分配内存,但是当我打印出大小时,它显示 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] = '[=10=]';
puts(string);
printf("\n%d", sizeof(string));
}
Input : Sample Text
Output :
Sample Text
4
sizeof 为您提供 char 指针的大小,在您的平台上为 4。
sizeof 运算符 returns 变量的 "size",在本例中是一个指针。在 32 位系统上,指针是 4 个字节,所以这是打印的内容。您想要使用 strlen(char*)
函数,它查看包含指针指向的字符串的内存。此函数将计算它看到的字节数,直到最后一个 0
终止符字节。