次の方法ではエラーが発生します。
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
読み取り専用にするべきではありませんよね?それはただのchar
1 バイトのデータです。文字列全体を読み取っているわけではありませんね。
編集:
これが私の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;
}