【发布时间】:2011-11-08 19:18:12
【问题描述】:
我对一个小程序感到困惑。
#include <stdio.h>
#define LEN 10
int main()
{
char str1[LEN] = "\0";
char str2[LEN] = "\0";
scanf("%s", str1);
scanf("%s", str2);
printf("%s\n", str1);
printf("%s\n", str2);
return 0;
}
如果我的输入是:
芒果巴淘
mangobatao123456
为什么输出应该是:
123456
mangobatao123456
而不是:
芒果巴淘
mangobatao123456
char 数组是如何在内存中分配的?
【问题讨论】:
-
scanf("%s", str)本质上是不安全的,除非您完全控制将出现在标准输入上的内容。不管str多么大,用户可以键入的字符多于它所能容纳的字符,从而导致未定义的行为。 (如果你幸运的话,未定义的行为只有会使你的程序崩溃。)