2

c を使用してファイルを作成/開こうとしています。fgets コマンドを使用して名前を入力するので、次のようにバッファをオーバーフローさせることはできません。

void main() {
    printf("Enter file name: ");
    char * fileName = (char *) calloc(MAX_BUFFER_SIZE, sizeof(char));
    fgets(fileName, MAX_BUFFER_SIZE, stdin);
    FILE *inputFile = fopen(fileName, "w");
    if(inputFile==NULL) perror(fileName);
}

デバッガーを使用すると、ファイル名に入力した値が希望どおりであることがわかりますが、fopen 関数は NULL ポインターを返し、「無効な引数」エラーが発生します。代わりに使用scanf("%s", fileName)しても問題はなく、ファイルが作成されますが、この方法ではバッファがオーバーフローする可能性があります。最初の例が機能しない理由はありますか? 前もって感謝します :)

4

2 に答える 2

4

によって読み取られる文字列fgetsには、最後に改行がある場合があります。で文字列を使用する前に、それを削除する必要がありますfopen

最後に改行を削除する方法は?

于 2012-05-14T07:19:48.493 に答える
2

fgets()scanf("%s")またはとは異なる方法で改行を扱いgets()ます。それらとは異なりfgets()、文字列に改行を含めます。ファイル名を入力した後、おそらくファイル名に改行が含まれていると思われるEnterキーを押したため、無効になりました。

于 2012-05-14T07:21:59.017 に答える