c-如何输出比分配内存更长的字符串



我昨天写了这段代码。我的目标是:我要求用户输入一个字符串。我把它存储在一个数组中。如果他输入的字符串比数组长度长,那么在屏幕上输出数组中的数组字符后,我会用getchar()输出其余字符,除非我遇到换行符。代码在这里:

#include<stdio.h>
#include<malloc.h>
#define BACKUP 20
int main()
{
char *input=NULL;
char rest[BACKUP],c;
input= malloc(sizeof(char)*20);
printf("%lu",sizeof(input));
int i=0,j=1;
printf("nEnter a very long string.nn>>");
fgets(input, sizeof(input), stdin);
printf("%s",input);
while((rest[i]=getchar())!='n')
{       
i=1;    
for(;i<BACKUP;i++)
rest[i]=getchar();
i=0;
for(;i<BACKUP;i++)
printf("%c",rest[i]);
i=0;
}
return 0;
}

问题是,第一个循环进行得很好,但之后它的行为就很奇怪了。你能纠正一下吗?
如果有其他方法解决这个问题会更好
我用getchar()从输入区输出所有字符,这不是一个解决方案吗。我的意思是,我一开始就不需要数组了
我应该将realloc()发送到数组,然后输入数组中的其余字符吗?最后,当输入区域什么都没有留下时,我应该在屏幕上打印数组内容
同时,有人能说出用户输入存储在哪里吗?我在哪里可以学习/研究在C编译器的基础级别上发生了什么

语句

fgets(input, sizeof(input), stdin);  

是错误的,因为sizeof(input)将为您提供指针input的大小,而不是分配的内存大小。将其更改为

fgets(input, 20, stdin);  

要输出其余字符,请尝试此

char rest;
printf("nEnter a very long string.nn>>");
fgets(input, 20, stdin);
printf("%sn",input);
while((rest=getchar())!='n')
{
putchar(rest);
}  

我用getchar()从输入区输出所有字符不是一个解决方案吗。我的意思是,我一开始就不需要数组了?

getchar是一个不能用于输出的输入函数。您可以使用putchar来执行此操作。如果只想输出其余字符,则无需对其使用数组。我把char rest[]改成了char rest

同时有人能说出用户输入存储在哪里吗?

输入存储在系统缓冲区(shell)中。当您按下EnterReturn

相关内容

  • 没有找到相关文章

最新更新