鱼C论坛

 找回密码
 立即注册
查看: 3010|回复: 2

一个字符串给另一个字符串循环赋值的问题

[复制链接]
发表于 2017-4-24 23:38:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void copy_string(char from[],char to[]);
void main()
{
        char a[]="I'm superman!";
        char b[]="I'm loser!";
        printf("string a is:%s\n",a);
        printf("string b is:%s\n",b);
        printf("copy string a to string b:\n");
        copy_string(a,b);
        printf("string a is:%s\n",a);
        printf("string b is:%s\n",b);
}
void copy_string(char from[],char to[])
{
        int i=0;
        while(from[i]!='\0')
        {
                to[i]=from[i];
                i++;
        }
        to[i]='\0';
}
当b的长度比a长时   没有问题
当a的长度比b长时   函数运行完后a的值就为"!"了
用单步调试  好像是当a数组将"!"赋值给b时,已经覆盖了之前赋值给b的'"I"  想不明白为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-25 00:07:33 | 显示全部楼层
结果是不可预期的,不会每次结果都一样的,比如你说的I 下次重启电脑再运行就不一定是什么了,而且还可能会崩溃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-25 08:29:08 | 显示全部楼层
因为你分配的给a和b的内存是固定的,是连续一段,当你a比b长后,复制比b长的那些字符,是要复制给b后边的内存,后边的内存有可能其他程序在使用,一直在变化,而且这样会造成内存泄露,因为b实际没法管理到后边那些,值也有可能变化。最好用remalloc重新分配与a等额的内存+1,才开始复制,+1是为了存放结束符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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