0

スペースを含む文字列を入力したい。while( (c = getchar()) != '\n' && c != '\0');私は gets() を使用しましたが、問題を引き起こす可能性のある改行文字 [using ] を既に処理しています。しかし、最初の gets() はいくつかのはぐれ文字を入力します! また、ランダムな文字列scanf( "%[^\n]s", a)の代わりに使用すると、保存されます! gets()誰かが理由を見つけるのを手伝ってもらえますか?

コードは次のとおりです。

printf(" \n Enter the string");
while( (c =getchar()) != '\n' && c != '\0');
gets(a); // some garbage string is stored in a....if i replace it with scanf()...then                    also garbage string is stored 

printf(" \n The ENTERED  string is %s", a);


printf("\n Enter the substring to be extracted (max 20)  ");
while( (c =getchar()) != '\n' && c != '\0');
gets(sub);
4

1 に答える 1

1

これは私にとってはうまくいきます。ショート バッファを使用して、入力文字列が入力バッファをオーバーフローしても問題が発生しないことを確認しました (ストリームから予想されるように、オーバーフローはstdinへの次の呼び出しでバッファリングされます)。fgets

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char a[32];
    for (;;) {
            printf("Enter the string:\n");
            fgets(a, sizeof(a), stdin);
            strtok(a, "\r\n");
            printf("The entered string is '%s'\n", a);
    }
}
于 2013-08-18T11:14:06.853 に答える