我有以下代码:如何在c中正确printf整数和字符串?
char *s1, *s2;
char str[10];
printf("type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%s\n", s1);
printf("%s\n", s2);
当我运行代码,并输入输入 “A 1” 如下:
type a string: A 1
我得到了以下结果:
A
�<�
我试图读取第一个字符作为字符串和第三个字符作为整数,然后在屏幕上打印出来。第一个角色总是可以工作,但屏幕之后会显示随机的东西....我应该如何解决它?
谢谢
另一件事,人们没有了一点提到:请不要SCANF为有限大小的缓冲区。用户可以轻松输入超过极限值并将程序结束。 (另请参阅:缓冲区溢出攻击) – 2012-07-31 02:54:05
@ DennisMeng:可以添加宽度说明符,例如'%123s'。由于该宽度不包含空终止符,因此它仍然具有潜在的危险性。 – diapir 2014-06-07 10:54:11
@diapir真的。重要的一点是避免缓冲区溢出。 – 2014-06-07 20:10:12