Ъγ:_小ツ雨oο 发表于 2018-6-24 09:15:20

c strcpy问题





strcpy运行结果 和小甲鱼老师结果运行 结果不一样, 是因为系统的问题吗

BngThea 发表于 2018-6-24 10:40:09

你的结果是对的
小甲鱼老师的那个结果对应的不是这个代码吧

关键是感觉 发表于 2018-6-24 10:58:44

本帖最后由 关键是感觉 于 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
其中,不管是函数调用从右到左入参数,还是从左到右。或者说高位放在低位内存地址。这些其实都只是概念而已,没有谁规定必须这样做,不同的系统应该有不同的处理方式,所以理解原理,不必死记硬背。
例如。有人说联想电脑好,联想电脑好。这不是绝对的,你需要看电脑的配置才能知道好坏。


人造人 发表于 2018-6-24 13:34:02

两个都是正确的,如果要深究这个问题,我需要你的反汇编代码

人造人 发表于 2018-6-24 13:43:03

BngThea 发表于 2018-6-24 10:40
你的结果是对的
小甲鱼老师的那个结果对应的不是这个代码吧

你可以在linux下试一试

wkg 发表于 2018-6-24 23:51:05

Str2数组的内存空间溢出了(越界)!
页: [1]
查看完整版本: c strcpy问题