如何在c语言中处理长度较长的字符串时,在一行输入2个特定大小的字符串?

问题描述 投票:0回答:1

我想从输入中读取两个字符串,就像下面的代码。例如,如果用户输入 "steven "作为name[0],那么第二个scanf()将无法工作,结果是name[0]="stev "和name[1]="en"。 我想要的输出是name[0]="stev",name[1]最多是用第二个scanf()读取的4个字符,例如name[1]="gabr",如果输入是gabriel.我试过在第二个scanf()之前用fflush(stdin),也试过用fgets代替scanf,但都没有用。

#include <stdio.h>

int main()
{
    char name[2][5];
    printf("Enter name1: \n");
    scanf("%4s", name[0]);
    //fflush(stdin);
    printf("Enter name2: \n");
    scanf("%4s", name[1]);
    for(int i=0 ; i<2 ; i++)
        printf("You entered: %s\n", name[i]);
    return 0;
}

谁能帮我解决这个问题?

c scanf buffer-overflow
1个回答
0
投票

我建议你使用 fgets 而不是 scanf,就像这样。

fgets( name[0], 5, stdin );

这样一来,你就可以检查一个换行符是否被 fgets (scanf 不提供这些信息),如果不提供,则消耗剩下的行。

int len = strlen( name[0] );
if ( len > 0 && name[0][len-1] != '\n' )
{
    //a newline was not read by fgets, so we must consume the
    //rest of the line up to and including the '\n' character
    int c;

    while ( ( c = fgetc( stdin) ) != EOF && c != '\n' );
}
© www.soinside.com 2019 - 2024. All rights reserved.