【发布时间】:2012-07-28 18:20:58
【问题描述】:
我有以下代码:
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
�<�
我正在尝试将第一个字符读取为字符串,将第三个字符读取为整数,然后将它们打印在屏幕上。第一个字符总是有效,但之后屏幕只会显示随机的东西......我应该如何解决它?
【问题讨论】:
-
另一件人们暂时没有提到的事情:请不要扫描到有限大小的缓冲区。用户可以轻松地输入超过限制的内容,然后将您的程序搞砸。 (另见:缓冲区溢出攻击)
-
@DennisMeng:可以添加宽度说明符,例如
%123s。它仍然具有潜在的危险,因为该宽度不包括空终止符。 -
@diapir 是的。重要的是避免缓冲区溢出。