我在c中遇到了scanf
的问题。在阅读了其他关于如何解决scanf
问题的Stackoverflow帖子后,我现在知道scanf
不推荐,但我必须将其用于家庭作业。我试图存储3个字符串值,根据它们的缓冲区大小有一个最大的大小。当我编译并运行这个程序时,我输入值255 255 255
,这就是打印的内容。
1:
2:
3: 255
程序源代码:
#include <stdio.h>
int main(){
char first[8] = "", second[3] = "", third[3] = "";
scanf("%8s %3s %3s", first, second, third);
printf("1: %sn2: %sn3: %s", first, second, third);
}
按照目前的定义,数组只能存储非常短的字符串:
-
char first[8]
只能存储7字节和一个空终止符, -
char second[3]
只能存储2字节和一个空终止符, -
char third[3]
只能存储2字节和一个空终止符。
scanf
格式字符串应该是:
scanf("%7s %2s %2s", first, second, third);
当前代码调用未定义的行为,因为您存储的字符串大于second
和third
的数组大小。
char first[9] = "", second[4] = "", third[4] = "";
检查scanf()
的返回值