我昨天写了这段代码。我的目标是:
我要求用户输入一个字符串。我将它存储在一个数组中。如果他输入的字符串长于数组长度,那么在屏幕上的数组输出数组字符后,我会输出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.\n\n>>");
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编译器在基础级别上发生的事情?
答案 0 :(得分:1)
声明
fgets(input, sizeof(input), stdin);
是错误的,因为sizeof(input)
会给你指针input
的大小而不是分配的内存大小。将其更改为
fgets(input, 20, stdin);
并输出其余字符,试试这个
char rest;
printf("\nEnter a very long string.\n\n>>");
fgets(input, 20, stdin);
printf("%s\n",input);
while((rest=getchar())!='\n')
{
putchar(rest);
}
我可以通过
getchar()
从输入区域输出所有字符,这不是一个解决方案。我的意思是,我不再需要数组了吗?
getchar
是一个输入函数,您无法将其用于输出。您可以使用putchar
执行此操作。如果您只想输出它们,则无需为其余字符使用数组。我将char rest[]
更改为char rest
。
有人可以告诉用户输入同时存储在哪里吗?
输入存储在系统缓冲区(shell)中。当您按 Enter 或返回键时,它将转到C标准缓冲区。