首页 新闻 会员 周边 捐助

c语言strcat连接问题,急急急

0
悬赏园豆:5 [待解决问题]

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
char st1[15]="My name is ";
char st3[10];
char st2[10];
printf("input your name:\n");
scanf("%s%s",st3,st2);
strcat(st1,st2);
puts(st1);
printf("%d\n",strlen(st1));
printf("%ld\n",&st1);
printf("%ld\n",&st2);
printf("%ld\n",&st3);
puts(st2);
return 0;

}

st1长度是15,st2长度10,连接以后st的长度达到20,明显大于已经定义的长度,但是并没有报错,这个不理解,求指导求教育求熏陶。先谢了

Kahuna的主页 Kahuna | 初学一级 | 园豆:191
提问于:2012-03-09 16:43
< >
分享
所有回答(2)
1

应该是会出错的,但也不是一定,看一下strcat的源码:

1 Char* strcat ( char * dst , const char * src )
2 {
3 char * cp = dst;
4 while( *cp )
5 cp++; /* find end of dst */
6 while( *cp++ = *src++ ) ; /* Copy src to end of dst */
7 return( dst ); /* return dst */
8 }
dst必须有足够的空间来容纳src的字符串,才能狗保证功能正确执行,在循环的时候:
while( *cp++ = *src++ ) ;
默认dst是有足够的空间进行++操作的,但是如果你的空间不足,而dst所指向的空间之后的内存区域是空闲的,没有被使用的,dst越界之后可能也不会出现错误,你说的应该就是这种情况了。但是这种操作引发的问题比起直接产生错误更加麻烦。
C的设计原则就是相信程序员,所以,使用这些方法的时候,严格控制一下吧。
zsounder | 园豆:2819 (老鸟四级) | 2012-03-10 10:09
0

strcat一律应该用strncat代替!

storysnail | 园豆:204 (菜鸟二级) | 2012-06-08 01:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册