【发布时间】:2016-10-20 05:18:15
【问题描述】:
在下面的程序中,
#include<stdio.h>
#include<stdlib.h>
int main(){
const char *str1 = "abc";
char *str2 = (char *)malloc(sizeof(char)*4);
str2= "def";
str2[1]='s';
printf("str2 is %s", str2);
}
调试器:
(gdb) ptype str1
type = const char *
(gdb) ptype str2
type = char *
(gdb) n
7 str2[1]='s';
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005ab in main () at main.c:7
7 str2[1]='s';
(gdb)
str2[1] = 's'; 上的 SIGSEGV
根据我的理解,由于声明const char *st1 = "abc",其中字符串文字是常量,因此无法修改st1 指向的abc。
为什么char * 类型str2 不允许修改元素? stringliteral def 也是常量字符串文字。
【问题讨论】:
标签: c pointers malloc char-pointer