gpt4 book ai didi

c - 在c中用strlen验证

转载 作者:行者123 更新时间:2023-12-02 07:32:11 25 4
gpt4 key购买 nike

我正在使用这段代码来验证结构中输入的长度,这样文件就不会爆炸,但我认为我没有正确执行它。

    do
{
inputflag=0;
printf("Passenger ID no: ");
gets(newRes.idCard);
if((strlen(newRes.idCard))>7)
{
printf("invalid input \n");
inputflag=1;
}
fflush(stdin);
} while(inputflag==0);

最佳答案

您的 gets 调用不安全。它可以接受比您分配的更多的字符。繁荣。

假设您已经为 .idCard 分配了至少 8 个字节(即 7 个​​字符加上终止符),然后考虑使用这个:

  fgets(newRes.idCard, 7+1, stdin);

这确保您不会接受太多的字符。它将根据需要截断。检查 fgets 的返回值是否成功。

(man fgets)

编译此示例代码并进行研究。我希望你能在这里找到你要找的东西。

#include <stdio.h>
#include <string.h>

#define MAX_ID_LEN (7)

int main() {
char idCard[MAX_ID_LEN+1];
printf("ID: ");
if (fgets(idCard, MAX_ID_LEN+1, stdin)) {
char *cLast = idCard + strlen(idCard)-1;
if (*cLast == '\n')
*cLast = 0; // strip newline *if* present
printf("Success! idCard='%s'\n", idCard);
} else {
printf("Failure.\n");
}
return 0;
}

注意那里有几行代码来检查输入是否包含换行符并将其删除。 fgets 确保换行符除非用户输入的 ID 超过 7 个字符。我希望这对您来说很清楚。

或者,这可能不会让您分心:(只需使用 fscanf)

#include <stdio.h>

int main() {
char idCard[7+1];
printf("ID: ");
fscanf(stdin, "%7s", idCard);
printf("idCard='%s'\n", idCard);
return 0;
}

关于c - 在c中用strlen验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20748700/

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