一个字符串给另一个字符串循环赋值的问题
#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"想不明白为什么 结果是不可预期的,不会每次结果都一样的,比如你说的I 下次重启电脑再运行就不一定是什么了,而且还可能会崩溃 因为你分配的给a和b的内存是固定的,是连续一段,当你a比b长后,复制比b长的那些字符,是要复制给b后边的内存,后边的内存有可能其他程序在使用,一直在变化,而且这样会造成内存泄露,因为b实际没法管理到后边那些,值也有可能变化。最好用remalloc重新分配与a等额的内存+1,才开始复制,+1是为了存放结束符
页:
[1]