我有以下函数,do while里面有一个循环:
void GetFiveNumericValues()
{
int validationResult;
char input[5];
do
{
printf("Please enter 5 digits:\n");
validationResult = scanf("%s", &input);
printf("Validation result: %d\n", validationResult);
} while (validationResult != 1);
// while (!(validationResult == 1));
// while (validationResult > 1 || validationResult < 1);
}
Run Code Online (Sandbox Code Playgroud)
即使在时,循环也没有完成validationResult == 1.
我在这里错过了什么?
input[]太小而不能容纳5个字符的字符串,因为'\0'除了5个输入字符之外它还需要保持终止.如果您实际输入5个字符,则会出现缓冲区溢出和未定义的行为.至少改为:
char input[6];
Run Code Online (Sandbox Code Playgroud)
此外这一行:
validationResult = scanf("%s", &input);
Run Code Online (Sandbox Code Playgroud)
应该:
validationResult = scanf("%s", input);
Run Code Online (Sandbox Code Playgroud)
因为input已经是一个有效的指针.
或者更好的是:
validationResult = scanf("%5s", input);
Run Code Online (Sandbox Code Playgroud)
即使您输入无效,也可以防止缓冲区溢出.