use*_*304 4 c memory scanf char
我对一个小程序感到困惑.
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果我的输入是:
mangobatao
mangobatao123456
为什么输出应该是:
123456
mangobatao123456
并不是:
mangobatao
mangobatao123456
如何char
在内存中分配数组?
好吧,10个字符的char
数组不适合"mangobatao"
,因为它有10个字符 - 没有空终止符.这意味着您已经导致了未定义的行为,因此任何事情都可能发生.
在这种情况下,它看起来像你的编译器str2
之前str1
在内存中布局,所以当你调用scanf
fill时str2
,较长的字符串会覆盖开头str1
.这就是为什么你看到你在str2
尝试打印时应该想到的结果str1
.如果您使用100的长度,您的示例将正常工作.