0

次の方法ではエラーが発生します。

BOOL should_begin(void) {
    char yn;
    do {
        printf("Continue? [Y/N] ");
        yn = getchar();
        printf("\n");
        yn = toupper(yn);
        if (yn == 'N') {
            return FALSE;
        }
    } while (yn != 'Y');
    return TRUE;
}

コードは に到達するまで正常に実行されますtoupper()が、この時点でセグメンテーション違反が発生します。文字列の一部で呼び出されたこのような質問を見てきましtoupper()たが、それは誰かがリテラルを変更しようとしたときだけでした。

それで、何が得られますか?char yn読み取り専用にするべきではありませんよね?それはただのchar1 バイトのデータです。文字列全体を読み取っているわけではありませんね。


編集

これが私のmain()機能です。

int main(int argc, char* argv[]) {

    /* just some printf()s with instructions */

    if (!should_begin()) {
        return 0;
    }

    /* then continue with rest of the program */

    return 0;
}
4

1 に答える 1