在C/C++中定义一个字符串,字符数组的时候,创建方式可以像下面两种方式,
1、char str[9];
2、char *str = new char[9];
第一种方式分配的内存是在栈上,第二种是在堆上,在Visual Studio 2019上第一种方式定义程序运行结果可能出现运行错误
在main函数中测试:
char str1[6]="hello";
char str2[7] = " world";
char *hellowolrd = strcat(str1, str2);
调试运行上面的代码,main函数结束后,关闭窗口,报了Run-Time Check Failure #2 - Stack around the variable 'farr' was corrupted.,直接运行exe之后关闭也会报错,而如果使用VS2015编译,调试运行后关闭会报错,但是直接运行exe之后关闭不会报错
而使用下面代码则不会报错
char* str1 = new char[6];
memcpy(str1, "hello", 6);
char* str2 = new char[7];
memcpy(str2, " world", 7);
char * hellowolrd = strcat(str1, str2);