gpt4 book ai didi

c - 为什么我不能使用 %s 而不是 %c?

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

问题的整个功能是关于给出一个用 {0} 初始化的二维数组作为输出,并使用户能够在字段上移动 1

char wasd;
scanf("%c", &wasd);

(我认为通过改变变量 wasd 的值来移动的功能并不重要)现在我的问题是为什么要使用

scanf("%s", &wasd);

只部分起作用(有时 1 一直在一个字段中并在新位置出现第二次,尽管它实际上应该被删除)和

scanf("%.1s", &wasd);

导致该字段被不停地打印出来,直到关闭执行程序。在研究了 %c 和 %s 之间的区别后,我想到了使用 %.1s Why does C's printf format string have both %c and %s? ?如果一个人可以通读它找出答案,那我就不够聪明,也不够学 c 来得到它。我也找到了这个 fscanf() in C - difference between %s and %c但我对 EOF 一无所知,其中一个答案说是问题的原因,所以我宁愿没有它也能得到答案。谢谢解答

最佳答案

就这么简单,%s 是一个(非空)字符串的转换。 C 中的 string 始终以 0 字节结尾,因此任何非空字符串至少需要 两个 字节。如果您将指针传递给单个 char 变量,scanf() 将覆盖该变量之后内存中的任何内容——您将导致未定义的行为 任何事情都有可能发生。


旁注,scanf("%s", ..),即使您给它一个 chararray,也总是如果输入更长的内容,则会溢出缓冲区,从而导致未定义的行为。您必须包含一个字段宽度,例如

char str[10];
scanf("%9s", str);

最好根本不要使用 scanf()。对于单个字符输入,您可以只使用 getchar()(注意它返回一个 int)。您可能还想阅读我的 beginners' guide away from scanf .

关于c - 为什么我不能使用 %s 而不是 %c?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139432/

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