读取长度未知的字符串

时间:2013-07-03 09:23:56

标签: 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)
            {
                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”,&amp; j)然后按下这个scanf的输入将使我的第一个字符串为空

1 个答案:

答案 0 :(得分:2)

您使用的问题,例如在您按照问题的方式阅读字符串之前,scanfscanf调用在输入缓冲区中留下换行符。因此,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);