关于字符串数组 做指针输入的问题 2C

#include
void gb(char **buf)
{
*buf[0] = 'a'; //这里down掉
}

int main()
{
char b[] = { "aaaasssddddasd" };
printf("%s\n", b);
gb(&b);
system("pause");
return 0;
}

b是常量指针,不能当做左值这个我知道,这个程序里的被调函数也没有修改b的值。
为什么在 *buf[0] = 'a'; 这里会编译不过去呢?

5个回答

这是我画的内存模型图 老哥们看看有没有问题(O_O)?

这是我画的内存模型图 老哥们看看哪里出了问题(O_O)?图片

首先这个b并不是常量指针,char *b = "aaaasssddddasd";这个才是常量指针,试图修改任何一个字符都会出现异常崩溃
其次这样的传参方式在很多编译器里过不去(例如VS)
*buf[0] = 'a';改成(*buf)[0] = 'a';试试

如图,没交换值,只通过了编译
图片说明

变量b被编译器编译在只读数据段。不能修改内容

yjz1409276
红色代码 如果b是动态分配的,则不会出现你的问题。
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问