读书人

strcpy程序中如何自动分配空间

发布时间: 2012-03-04 11:13:33 作者: rapoo

strcpy程序中怎么自动分配空间
这个是我写的strcpy函数的实现 我发现输入两个字符串,比如
“asdfasdf”, "asdfasdfasdfasdf "第2个字符串比第1个长 但是程序竟然能输出正确结果,我都没有写一段当被填充的空间不够时分配空间的代码,为什么还能正确输出?而且输入两个字符串在内存空间中是相邻的,这样当str1空间不够时 接下来写进去的数据应该会将str2覆盖才对,为什么结果是str2没有被覆盖。
#include <stdio.h>


char* strcpy_test(char *str1,char *str2)
{



char *temp;
temp=str1;
while(*str2!= '\0 ')
{
*temp++ = *str2++;
}
*temp= '\0 ';





return str1;


}
void main()
{

char a[20],b[20];
printf( "Enter 2 string:\n ");
gets(a);
gets(b);
puts(a);
puts(b);
strcpy_test(a,b);
puts(a);
printf( "\n ");
puts(b);


}

[解决办法]
指针的越界赋值也不会报错,
这正是指针的缺点,
而这也体现了它灵活的一面,
用一个长的字符串覆盖了一个短的字符串,
占用了其它的有用空间,
却能正确的输出,
这是因为输出的时候是到 '\0 '为止的,
它不管你是不是非法使用的内存区,
就是一个劲的往下输出直到 '\0 '才停,
所以你的字符串还是能被输出的,
但是这有问题的,
是内存的使用有误,
因为你占用了系统的其它内存,
在函数调用端delete[]这个str1的时候就要出错了

读书人网 >C语言

热点推荐