OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3059|回复: 4

关于strcpy的问题

[复制链接]

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
发表于 2016-11-18 19:28:59 | 显示全部楼层 |阅读模式
5金钱
char* a;
char *s1 = "abcd";
char s2[10] = "ABCDEF";
printf("s1 = %s\n\ts2 = %s\r\n",s1,s2);
strcpy(s1,s2);
printf("s1 = %s\n\ts2 = %s\r\n",s1,s2);
        strcpy(a,s1);
        printf("%s\r\n",a);

结果就a不对,不知为何

捕获.PNG

最佳答案

查看完整内容[请看2#楼]

如果你这段代码是在单片机上使用,那么在第一个cpy时,从理论上讲就应该已经出现错误了(运行),至于你说a不对原因,c语言中,定义指针,只分配指针空间,指针所占空间只和机器类型有关,要使用,必须重新分配空间才可以使用,否则会有意料不到的问题(实际运行中,内存溢出)。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-11-18 19:29:00 | 显示全部楼层
本帖最后由 dengxingling8 于 2016-11-18 20:42 编辑

如果你这段代码是在单片机上使用,那么在第一个cpy时,从理论上讲就应该已经出现错误了(运行),至于你说a不对原因,c语言中,定义指针,只分配指针空间,指针所占空间只和机器类型有关,要使用,必须重新分配空间才可以使用,否则会有意料不到的问题(实际运行中,内存溢出)。
回复

使用道具 举报

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
 楼主| 发表于 2016-11-19 11:26:35 | 显示全部楼层
dengxingling8 发表于 2016-11-18 19:29
如果你这段代码是在单片机上使用,那么在第一个cpy时,从理论上讲就应该已经出现错误了(运行),至于你说a ...

的确,s1的结果也是不对的,我给a分配内存后,结果就正常了
回复

使用道具 举报

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
 楼主| 发表于 2016-11-19 11:49:03 | 显示全部楼层
dengxingling8 发表于 2016-11-18 19:29
如果你这段代码是在单片机上使用,那么在第一个cpy时,从理论上讲就应该已经出现错误了(运行),至于你说a ...

char* a1[1000][3];
char b1[10]="ABCDEF";
for(k=0;k<2;k++)
        {
                if(k==1)
                {
                        b1[0]='1';
                                    b1[1]='2';
                }
                        a1[0][k]=mymalloc(SRAMIN,2048);//éê&#199;&#235;&#196;ú′&#230;
                        strcpy(a1[0][k],b1);
                        myfree(SRAMIN,a1[0][k]);//êí·&#197;&#196;ú′&#230;
                        printf("%s\r\n",a1[0][k]);
        }
a1[0][0]还是12CDEF
for(k=0;k<2;k++)
        {
                a1[0][k]=mymalloc(SRAMIN,10);//éê&#199;&#235;&#196;ú′&#230;
        }
for(k=0;k<2;k++)
        {
                if(k==1)
                {
                        b1[0]='1';
            b1[1]='2';
                }
//                        a1[0][k]=mymalloc(SRAMIN,10);//éê&#199;&#235;&#196;ú′&#230;
                        strcpy(a1[0][k],b1);
                        myfree(SRAMIN,a1[0][k]);//êí·&#197;&#196;ú′&#230;
                        printf("%d\r\n",k);
                        printf("%s\r\n",a1[0][k]);
        }
改成这样就好了,为何
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-11-19 12:16:29 | 显示全部楼层
本帖最后由 dengxingling8 于 2016-11-19 12:19 编辑
MonkeyD路飞 发表于 2016-11-19 11:49
char* a1[1000][3];
char b1[10]="ABCDEF";
for(k=0;k

什么意思?你说的好是指什么?有什么不懂的,你可以qq我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 08:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表