2 sinat 24820331 sinat_24820331 于 2016.04.10 09:06 提问

关于字符串数组 做指针输入的问题 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个回答

sinat_24820331
sinat_24820331   2016.04.10 09:23

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

sinat_24820331
sinat_24820331   2016.04.10 09:24

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

qq423399099
qq423399099   Ds   Rxr 2016.04.10 11:40

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

zcw1994
zcw1994   2016.04.10 14:32

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

yjz1409276
yjz1409276   2016.04.20 01:30

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

yjz1409276
yjz1409276 如果b是动态分配的,则不会出现你的问题。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!