1. ホーム
  2. c

[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。

2022-02-06 03:21:11

質問

が、このプログラムを実行すると、このエラーが出続けています。fgets関数が原因だと思うのですが。入力変数をNULLに初期化すれば解決するかと思い試してみましたが、ダメでした。また、mallocをしないと解決しないかもしれないと直感しています。しかし、あなたの助けは非常に高く評価されています。

int main(int argc, char* argv[])
{
    char* input = NULL;

    // ensure one and only one command line argument
    if (argc != 2)
    {
        printf("Usage: %s [name of document]\n", argv[0]);
        return 1;
    }

    // open a new document for writing
    FILE* fp = fopen(argv[1], "w");

    // check for successful open
    if(fp == NULL)
    {
        printf("Could not create %s\n", argv[1]);
        return 2;
    }

    // get text from user and save to file
    while(true)
    {
        // get text from user
        printf("Enter a new line of text (or \"quit\"):\n");
        fgets(input, 50, stdin);

        // if user wants to quit
        if (input != NULL && strcmp(input, "quit") == 0)
        {
            free(input);
            break;
        }
        // if user wants to enter text
        else if (input != NULL)
        {
            fputs(input, fp);
            fputs("\n", fp);
            printf("CHA-CHING!\n\n");
            free(input);
        }
    }

    // close the file and end successfuly
    fclose(fp);
    return 0;
}

解決するには?

を使用することができます。 malloc()

#define

free