C 读取长度未知的字符串
如何读取循环中的多个字符串,每个字符串的长度以前未知?我尝试了以下方法,但效果不理想C 读取长度未知的字符串,c,C,如何读取循环中的多个字符串,每个字符串的长度以前未知?我尝试了以下方法,但效果不理想 int main() { int j, i = 0; char c; char *buf = malloc(20); size = 20; for(j = 0; j < 10; j++) { i = 0; while(1) { if(i == size) {
int main()
{
int j, i = 0;
char c;
char *buf = malloc(20);
size = 20;
for(j = 0; j < 10; j++)
{
i = 0;
while(1)
{
if(i == size)
{
buf = realloc(buf,size+10);
size += 10;
}
char c = getchar();
if(c == '\n')
break;
buf[i] = c;
i++;
}
buf[i] = '\0';
printf("%s\n", buf);
}
}
intmain()
{
int j,i=0;
字符c;
char*buf=malloc(20);
尺寸=20;
对于(j=0;j<10;j++)
{
i=0;
而(1)
{
如果(i==大小)
{
buf=realloc(buf,尺寸+10);
尺寸+=10;
}
char c=getchar();
如果(c=='\n')
打破
buf[i]=c;
i++;
}
buf[i]='\0';
printf(“%s\n”,buf);
}
}
只有当我将这些字符串作为输入时,它才起作用。但是,假设我在获取字符串输入之前有一个scanf(“%d”,&j),那么按下此scanf的enter键将使我的第一个字符串为空在以问题中的方式读取字符串之前,使用例如
scanf
的问题是scanf
调用将换行保留在输入缓冲区中。因此,getchar
获取的第一个字符是这一换行符,导致第一行为空
您可以通过以下两种方式解决此问题:
- 告诉
使用scanf
请注意格式代码后面的空格scanf("%d ", &i);
- 手动跳过空白:
int c; while ((c = fgetc(stdin)) != EOF && isspace(c)) ; /* `c` is now a non-space character or EOF, put it back if it's not EOF */ if (c != EOF) ungetc(c, stdin);