gpt4 book ai didi

c - 读取长度未知的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:52 26 4
gpt4 key购买 nike

如何在一个循环中读取多个字符串,每个字符串的长度都是未知的?我尝试了以下但它没有按预期工作。

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);
}
}

只有当我将这些字符串作为输入时它才有效。但是说我有一个 scanf("%d",&j) 就在我输入字符串之前,然后为此 scanf 按 enter 将使我的第一个字符串为空

最佳答案

你使用的问题,例如scanf 在按照问题中的方式读取字符串之前,scanf 调用 leaves 输入缓冲区中的换行符。所以 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);

关于c - 读取长度未知的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17444296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com