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

这怎么不起作用?它一次只读取一个字符,不管它是否是数字字符。@ugoren是的,我知道。读代码carefully@JoachimPileborg只有当我将这些字符串作为输入时,它才起作用。但是,假设在获取字符串输入之前我有一个scanf(“%d”,&j),那么按下此scanf的enter键将使我的第一个字符串为空。如果您之前有一个scanf错误,请在代码中发布此错误,您当前的代码应该不会看到integer有任何问题,因为它不知道任何问题integers@user2545792你很快就会做出评论,再次检查我的答案:)