2
int main(int argc, char const *argv[])
{
    char str[100][100];
    int n, i;

    scanf("%d", &n);

    for (i = 0; i < n; i++)
        gets(str[i]);

    for (i = 0; i < n; i++)
        printf("%s\n",str[i]);
}

文字列を正しく読み取れないのはなぜですか?

raja@raja-Inspiron-N5110:~/myctry$ ./a.out
2     
abc def

abc def
4

7 に答える 7

2

gets() を使用しないでください。データを事前に知らずに gets() が読み取る文字数を知ることは不可能であり、gets() はバッファーの末尾を超えて文字を格納し続けるため、使用するのは非常に危険です。コンピューターのセキュリティを破るために使用されています。代わりに fgets() を使用してください。

于 2013-07-19T13:34:39.233 に答える
0

7-isnotbad が言ったように、gets() は安全ではなく、fgets() はより良い選択です。

gets() と fgets() の両方が、バッファーから '\n' で終わる行を読み取ります。

多分あなたはこのコードを試すことができます:

#include "stdio.h"

#define MAX_LINE 1024
#define MAX_ROW  100
int main()
{
    char  str[MAX_ROW][MAX_LINE];
    int i,n;
    printf("input the row of lines :\n");
    scanf("%d\n",&n);
    if(n < 1)
    {printf("input error!\n");return -1;}
    for(i = 0; i < n; ++i)
        fgets(str[i],MAX_LINE - 1,stdin);
    for(i = 0; i < n; ++i)
        fputs(str[i],stdout);
    return 0;
}
于 2013-07-19T14:42:14.500 に答える