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所以会报错误。