下面的方法将导致错误:面对段故障,同时使用在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。 –
我希望你没有错过'#包括',是吗? –
第一号包括。 –