首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-04 
strcpy程序中怎么自动分配空间这个是我写的strcpy函数的实现我发现输入两个字符串,比如“asdfasdf”, asdfa

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的时候就要出错了

热点排行