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不应该是只读的,对吧?它只是一个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;
}
4

1 回答 1

4

getchar()返回int。某些返回值可能不适合char.

更改ynint yn

然后,从手册toupper()

int toupper(int c);

如果c不是无符号字符值,或者EOF,这些函数的行为是未定义的。

因此,您需要EOF在传递yntoupper().

FWIW,toupper()原型是ctype.h,你必须#include相同。

于 2015-05-22T07:15:08.027 回答