1. ホーム
  2. c

[解決済み] fopen()使用時にセグメンテーションフォールトが発生する。

2022-02-11 17:09:44

質問

なぜこのようなことが起こるのかわかりませんが、この非常に単純なコードから "セグメント化障害(コアダンプ)" が発生します。なぜなのか、何か思い当たることはありますか?私は、fopen()にどのファイルを開くか伝えるために、文字列を使用しなければなりません。

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

int main(void) {
    char *small = "small.ppm";
    FILE * fp;
    char word[5];
    fp = fopen(small, "r");
    fscanf(fp, "%s", word);
    printf("%s\n", word);

    return 0;
}

解決方法は?

あなたのコードは未定義の動作を呼び出す可能性があります。

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

int main(void) {
    char *small = "small.ppm";
    FILE * fp = fopen(small, "r");
    if (fp == NULL) {
        perror("fopen()");
        return EXIT_FAILURE;
    }
    char word[5];
    if (fscanf(fp, "%4s", word) != 1) {
        fprintf(stderr, "Error parsing\n");
        return EXIT_FAILURE;
    }
    printf("%s\n", word);
}