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在内存中布局,所以当你调用scanffill时str2,较长的字符串会覆盖开头str1.这就是为什么你看到你在str2尝试打印时应该想到的结果str1.如果您使用100的长度,您的示例将正常工作.
| 归档时间: |
|
| 查看次数: |
36827 次 |
| 最近记录: |