|
发表于 2018-6-24 10:58:44
|
显示全部楼层
本帖最后由 关键是感觉 于 2018-6-24 16:14 编辑
你是正确的
修改回复:
不好意思开始没分析清楚说错了;
你这个代码是有问题的,结果为什么不一样非常正常;
str2长度小于str1长度
你把str1的字符串强制拷贝到str2,超出str2变量大小。覆盖到哪里本身是说不清楚的,所以值是不确定的,这个就是问题。
例如:
比如这样的问题:
int a=0x3ff33333;
int b=0x33333333;
double c=1.2;
//33 33 33 33 33 33 f3 3f
printf("%lf",b,a);
为什么打印?a,b 会打印 结果:1.2
咋们不知道细节,用结果求推算过程。
调用printf
从右到左压栈参数 a,b "%lf"
在内存存放如下
高位在高地地址原则压入参数如下
'f'
'l'
'%'
33 内存地址 : ??
33
33
33
33
33 内存地址 : 98
f3 内存地址 : 99
3f 内存地址:100
然后printf读取第一个参数:“%lf”
%lf 表示获取一个long double大小字节的数据。33 33 33 33 33 33 f3 3f。让以浮点存储方式解读,所以打印1.2
其中,不管是函数调用从右到左入参数,还是从左到右。或者说高位放在低位内存地址。这些其实都只是概念而已,没有谁规定必须这样做,不同的系统应该有不同的处理方式,所以理解原理,不必死记硬背。
例如。有人说联想电脑好,联想电脑好。这不是绝对的,你需要看电脑的配置才能知道好坏。
|
|