下面的方法將導致錯誤:面對段故障,同時使用在toupper()
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
,一個字節的數據,我沒有讀完整個字符串,是嗎?
編輯:
這是我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;
}
這幾乎是完整的代碼。沒有別的,但有一些#include和#define。 –
我希望你沒有錯過'#包括',是嗎? –
第一號包括。 –