怀旧的年轻人 发表于 2017-4-24 23:38:59

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

#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!='\0')
        {
                to=from;
                i++;
        }
        to='\0';
}
当b的长度比a长时   没有问题
当a的长度比b长时   函数运行完后a的值就为"!"了
用单步调试好像是当a数组将"!"赋值给b时,已经覆盖了之前赋值给b的'"I"想不明白为什么

machimilk 发表于 2017-4-25 00:07:33

结果是不可预期的,不会每次结果都一样的,比如你说的I 下次重启电脑再运行就不一定是什么了,而且还可能会崩溃

lumber2388779 发表于 2017-4-25 08:29:08

因为你分配的给a和b的内存是固定的,是连续一段,当你a比b长后,复制比b长的那些字符,是要复制给b后边的内存,后边的内存有可能其他程序在使用,一直在变化,而且这样会造成内存泄露,因为b实际没法管理到后边那些,值也有可能变化。最好用remalloc重新分配与a等额的内存+1,才开始复制,+1是为了存放结束符
页: [1]
查看完整版本: 一个字符串给另一个字符串循环赋值的问题