1.概述
- 使用指针p1和 p2 指向2个字符串字面量,然后使用strcpy(p1,p2)报错,显示段错误。
char *p1 = "wzl";
char *p2 = "zxp";
strcpy(p1,p2);
编译无错误,无警告;
运行过程中: 段错误(核心已转储)
2.分析
- “wzl" 与 "zxp”都属于字符串字面量
等价于 == > char p1[ ] = {‘w’ , ‘z’ , ‘l’ , ‘\0’ }; 和 char p2[ ] = {‘z’ , ‘x’ , ‘p’ ,’\0’}; - 字符串子面量保存在程序的数据段中 .rodata 中 , 可读不可写, 因此定义的指针为 指向常量的指针
- strcpy函数原型为 char* strcpy(char* des,const char* source),可以看出函数的第一个形参paramater 并非为常量。
3.解决
- 方法一:
char p1[] = "wzl";
char *p2 = "zxp";
strcpy(p1,p2);
- 方法二:
char *p1 = "wzl";
char *p2 = "zxp";
p1 = p2;
4.参考
- https://www.cnblogs.com/wuOverflow/p/4544204.html