1. C语言问题求解
这个问题涉及到内存分布,在这里我假设你的电脑采用小端格式存储数据(小端格式存储不了解的话先网络下)。
1、首先可以列出第一个语句 struct data d = {"", -3, 769} 赋值后的内存分布,分布如下:
00 00 00 00 00 00 00 00 fd ff ff ff 01 03 00 00
从内存分布可知前8个0就是d.str,0xfffffffd代表d.arr[0] =-3,0x00000301代表d.arr[1]=769
注:默认从左往右的地址为从低到高,符合小端格式的设定
2、执行scanf("%s", d.str);//这里输入1234abcdef 语句后的内存分布如下:
31 32 33 34 61 62 63 64 65 66 00 ff 01 03 00 00
由于"1234abcdef"的长度10超过了a.str的大小8,那么后面的2字节就会被覆盖,从内存上看,从左往右的10个字节分别对应于"1234abcdef"的ascii码;那么为什么0x66('f')后面的字节为0了呢?那是因为字符串以'