c++问题 字符串问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 14:33:32
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[5];

strcpy(s,"dfdsfsd");
cout<<s;
return 0;
}

为什么运行后输出dfdsfsd?

这个是我写的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);

}

栈是倒着长的,str1越界不会将str2覆盖,str2越界倒是会将str1覆盖
正确
指针的越界赋值也不会报错,
这正是指针的缺点,
而这也体现了它灵活的一面,
用一个长的字符串覆盖了一个短的字符串,
占用了其它的有用