gpt4 book ai didi

c - 使用 gets() 进行缓冲存储

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

这里的编码是全新的。尝试研究这个主题,但很难找到从哪里开始我几乎不知道如何提出问题..

以下是我在在线类(class)中使用的一行代码,我试图了解 gets() 在这里是如何工作的。我正在使用 Visual Studio 学习 C,并且讲师在使用 gets() 时返回不同的输出(他正在使用 CodeLite)。对于他来说,当他在命令提示符中输入 firstname 超过 5 个字符时,缓冲区会将多余的字符溢出到后续的 char 变量 lastname 中。对我来说,当我输入额外的字符时,我的 printf() 将准确返回我输入的内容。例如:如果我输入名字:乔治姓氏:华盛顿,它将返回“你好,乔治,华盛顿。”,对于他来说,它将返回“你好,乔治,电子洗。”

Visual Studio 是否在我的 gets() 之间的缓冲区上执行某种刷新?如果当我在命令提示符上输入超过 5 个字符时,它会将所有字符存储在我的名字和姓氏 char 变量中,那么在 char firstname[5] 中指定“5”有什么意义呢?为什么在这种情况下 fgets() 是更好的解决方案?

#include <stdio.h>

void flush_input(){
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
}

void getinput_with_gets() {
char firstname[5];
char lastname[5];
printf("Enter your first name:");
gets(firstname);
printf("Enter your last name:");
gets(lastname);
printf("Hello, %s, %s\n", firstname, lastname);
}


void getinput_with_fgets() {
char firstname[5];
char lastname[5];
printf("Enter your first name:");
fgets(firstname, 5, stdin);
printf("Enter your last name:");
// fflush(stdin); // This function may not (invariably) work with input!
flush_input();
fgets(lastname, 5, stdin);
flush_input();
printf("Hello, %s, %s\n", firstname, lastname);
}

int main(int argc, char **argv) {
getinput_with_gets();
// getinput_with_fgets();
return 0;
}

最佳答案

char firstname[number] 中的数字是您为该字符数组分配的字符数。例如,如果使用 6 作为数字,则可以在该变量中放入 6 个字符。如果使用超过 6 个字符,则会产生 Buffer Overflow 。您可以查看C tutorials了解更多信息

关于c - 使用 gets() 进行缓冲存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47840180/

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