我正在尝试编写这个简单的代码,它将用户输入消息保存在堆栈中,然后再显示给他。 我不想限制用户输入的字符数,所以每次用户输入新字符时都使用动态内存分配。动态分配内存以保存用户输入
如果用户输入小号码,代码运行良好。的字符,但它不起作用,如果用户键入一个很大的号码。的字符
例如:如果我输入“艾哈迈德”它会显示给我,但如果我输入更多字符的东西它不。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *UserInput;
UserInput=(char *)calloc(1,sizeof(char));
int i=0,ii=0;
printf("Enter a message! \n");
while(*(UserInput+ii)!='\n'){
scanf("%c",(UserInput+i));
ii=i;
i++;
UserInput=realloc(UserInput,i*sizeof(char));
}
for(i=0;i<=ii;i++){
printf("%c",*(UserInput+i));
}
return 0;
}
1)'int i = 0' - >'int i = 1'(因为'i'代表安全大小) – BLUEPIXY
感谢您提出这个意见。当用户输入的垃圾初始值为'\ n'时,我添加了初始化来避免重合,所以我添加了这个初始化'* UserInput ='1';' – Ahmed
主要问题是'realloc'时的大小。修复像[this](https://ideone.com/ErKreS) – BLUEPIXY