c strcpy问题
strcpy运行结果 和小甲鱼老师结果运行 结果不一样, 是因为系统的问题吗 你的结果是对的
小甲鱼老师的那个结果对应的不是这个代码吧 本帖最后由 关键是感觉 于 2018-6-24 16:14 编辑
你是正确的{:10_249:}
修改回复:
不好意思开始没分析清楚说错了;
你这个代码是有问题的,结果为什么不一样非常正常;
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
其中,不管是函数调用从右到左入参数,还是从左到右。或者说高位放在低位内存地址。这些其实都只是概念而已,没有谁规定必须这样做,不同的系统应该有不同的处理方式,所以理解原理,不必死记硬背。
例如。有人说联想电脑好,联想电脑好。这不是绝对的,你需要看电脑的配置才能知道好坏。
两个都是正确的,如果要深究这个问题,我需要你的反汇编代码 BngThea 发表于 2018-6-24 10:40
你的结果是对的
小甲鱼老师的那个结果对应的不是这个代码吧
你可以在linux下试一试
Str2数组的内存空间溢出了(越界)!
页:
[1]