gpt4 book ai didi

c - C 中的简单循环和字符串长度

转载 作者:行者123 更新时间:2023-11-30 15:12:17 24 4
gpt4 key购买 nike

我对 C 还很陌生。在 Visual Studio 2015 中编写时,我尝试使用 fgets 安全地提示用户输入字符串。我想使用 fgets 获取字符串,检查字符串是否太长,如果太长则重新提示用户,直到他们输入一个好的字符串。这是我的代码

/*
* Nick Gilbert
* COS317 Lab 2 Task 2
*/
#include "stdafx.h"
int main()
{
char str[10];
int isValid = 0;
while (isValid == 0) {
printf("Please enter a password: ");
fgets(str, 10, stdin);
if (strlen(str) == 9 && str[8] != '\n') { //http://stackoverflow.com/questions/21691843/how-to-correctly-input-a-string-in-c
printf("Error! String is too long\n\n");
memset(&str[0], 0, sizeof(str));
}
else {
printf(str);
isValid = 1;
}
}
printf("Press 'Enter' to continue...");
getchar();
}

但是,当我运行它并输入错误的字符串时,多余的字符会自动输入到下一个 fget 中!

enter image description here

我怎样才能修复这个问题以完成我想要它做的事情?

最佳答案

如果 fgets 读取的字符串不以换行符结尾,则循环调用 fgets 直到换行符结束,然后再次提示用户。

    if (strlen(str) > 0 && str[strlen(str)-1] != '\n') {
printf("Error! String is too long\n\n");
do {
fgets(str, 10, stdin);
} while (strlen(str) > 0 && str[strlen(str)-1] != '\n') {
}

此外,切勿在 printf 的第一个参数处传递变量,特别是当该变量的内容来自用户输入的数据时。这样做可能会导致 format string vulnerability .

关于c - C 中的简单循环和字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com