strcat函数注意:
1:strcat函数在连接时,不加最后的结束符\0;
2:strcat函数在连接时,从指针所指向位置遇到结束符\0的位置开始拼接。
3:如果是
char
buf1
[100] =
"
12345
"
; char buf2[] = "abc"; strcat(buf1, buf2);可以连接成功,
在buf1里现在存的是12345abc\0,在末尾会带\0的;主要看连接前的这里有没有\0,有就带,没有就不带。
但是因为是从\0的位置开始连接的,那么应该都会带\0,就是到最后看有没有越界的错误,越界就报错误,
没有越界就不报错误;
eg:
char
buf1
[100] =
"12345
"
;
char
buf2
[] =
"abc"
;
//char buf3[100] = { 0 };
char
buf3
[100];
strcat
(
buf3
,
buf2
);
cout
<<
"buf3 :"
<<
buf3
<<
endl
;
一、如果不写buf3初始化为0,那么strcat时,会从buf3指针的位置开始检测什么位置是结束符\0,乱码之后是buf2,abc,这里是\0了,
开始连接buf2的abc,打印结果是 乱码abcabc\0,回车后,会报错误,因为buf2的内容由原来的abc\0被改成abcabc\0了;
Run-Time Check Failure #2 - Stack around the variable buf2 was corrupted;
二、把buf2和buf1的定义初始化位置交换。打印的是 乱码12345abc\0,没有报错误;因为buf1的内存够大
三、再把buf1的100,去掉,
char
buf2
[] =
"abc"
; char buf1[] = "12345";打印的是乱码12345abc\0
,
报错误;
buf1 was corrupted;,因为buf1的内容由原来的12345\0被改成12345abc\0了;
四、
char
buf1
[] =
"12345"
;
char
buf2
[] =
"abc"
;
char
buf3
[100] = { 0 };
strcat
(
buf3
,
buf2
);
cout
<<
"buf3 :"
<<
buf3
<<
endl
; buf3初始化0,这样的结果是正确的 buf3内容是abc\0;
在空行处加strcat(buf3, buf1);buf3内容是abc12345\0;
五、如果buf1的内存不够,
回车后,也会报这样的错误 buf1 was corrupted;
char
buf1
[] =
"12345"
;
char
buf2
[] =
"abc"
;
char
buf3
[8] = { 0 };
strcat
(
buf3
,
buf2
);
strcat
(
buf3
,
buf1
);
cout
<<
"buf3 :"
<<
buf3
<<
endl
;
因为buf3的内存少一个位置放\0所以会报错误。