为什么不能用指针修改字符串中某成员的内容


#include
int main()
{
    char *p="qwert\0";
    puts(p);
    p[2]='q';
    puts(p);
    
}

因为你的指针指向了字符串常量,字符串常量是不可修改的
你可以改成这样

char a[] = "qwert\0";
char *p=a;
puts(p);
p[2] = 'q';
puts(p);

或者这样

char *p=malloc(100);
strcpy(p,"qwert\0");
puts(p);
p[2] = 'q';
puts(p);

你这么定义的话,指针指向常量字符串,p是常量指针,相当于const char *,无法修改。如果你换成c++的话,编译器就会提示你不能这么定义。

img

至于常量指针和指针常量这两个概念,你得学下这两个的区别。

指针时不能指向常量字符串的,你可以改用字符数组:

#include <stdio.h>

int main()
{
    char p[] = "qwert\0";
    puts(p);
    p[2] = 'q';
    puts(p);
}

常量是不能改的,如果你用c++的String类型就可以改