char *p1 = "123", *p2 = "ABC", str[50]= "xyz"; strcpy(str + 2, strcat(p1, p2)); cout << str;
#include<string.h> int main() { char*p1="123",*p2="ABC",str[50]="xyz" printf("str+2=%s\n",str+2); printf("strcat(p1,p2)=%s\n",strcat(p1,p2)); }
[luoyiran@luoyiran ~]$ ./zifuchuan str+2=z 段错误 (core dumped)
1.在 C++ 代码中,变量是强类型的, char * p1 = "123", * p2 = "ABC";会编译报错。
2.在 C 代码中,char * p1 = "123", * p2 = "ABC"; 是可以编译通过的,由于 p1, p2 都是指向文字常量区(本质上p1和p2存储的是字符串的首字符地址),常量区中的数据不能被修改,通过strcat(p1, p2)向p1指向的常量区数据追加(修改)内容,显然是错误的。
3.此外,
对于 C++ 而言,char* strcat(char ,const char),传参p2时参数类型不兼容,所以通过strcat(p1, p2)会报错。
char* 形参可以接收 char* 和const char* 类型的参数。
const char* 形参只能接收,const char* 类型的参数。
对于 C 而言,const char* 形参也可以接收char, const char 类型的参数。
【解析】1.在 C++ 代码中,char * p1 = "123";会编译报错。
更多C++基础专业知识讲解,点击链接即可查看
https://www.nowcoder.com/link/zxyl-cpp11