gpt4 book ai didi

c - 试图防止堆栈溢出时出现意外结果

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:10 25 4
gpt4 key购买 nike

我试图通过指定变量的宽度来保护下面的字段,这样就不会发生缓冲区溢出。我不想使用 fgets(),因为我正在尝试按照我给出的规范(使用 scanf)编写一些东西。

代码如下:

char firstName[11], surName[21], job[16];

printf("Enter first name: ");
scanf("%10s", firstName);
printf("Enter surname: ");
scanf("%20s", surName);
printf("Enter job: ");
scanf("%15s", job);

所以对于这样的输入:

Enter first Name: UmbertoOverflow
/*surName gets skipped over*/
Enter job: janitor

我得到:

First name: UmbertoOve
Surname: rflow
Job: janitor

它没有给我输入姓氏的机会,它只是用名字的其余部分填充。这对我来说似乎是缓冲区溢出,那么有没有一种方法可以使用 scanf 而不会得到这个结果?

最佳答案

名字的

%10s 仅从输入字符串中读取前 10 个字符 - UmbertoOve 并放入 firstname 中。剩余的 - rflow - 仍在程序的输入缓冲区中,scanf() 用于 surname 获取这些字符。 '\n' - 或 Return - key 在输入名字时按下作为终止符并在 surname 中添加 rflow .

这不是缓冲区溢出,而是预期的行为。

关于c - 试图防止堆栈溢出时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889195/

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