问题描述
- 关于字符串数组 做指针输入的问题
-
#include
void gb(char **buf)
{
*buf[0] = 'a'; //这里down掉
}int main()
{
char b[] = { "aaaasssddddasd" };
printf("%sn", b);
gb(&b);
system("pause");
return 0;
}b是常量指针,不能当做左值这个我知道,这个程序里的被调函数也没有修改b的值。
为什么在 *buf[0] = 'a'; 这里会编译不过去呢?
解决方案
这是我画的内存模型图 老哥们看看有没有问题(O_O)?
解决方案二:
这是我画的内存模型图 老哥们看看哪里出了问题(O_O)?
解决方案三:
首先这个b并不是常量指针,char *b = "aaaasssddddasd";这个才是常量指针,试图修改任何一个字符都会出现异常崩溃
其次这样的传参方式在很多编译器里过不去(例如VS)
*buf[0] = 'a';改成(*buf)[0] = 'a';试试
解决方案五:
变量b被编译器编译在只读数据段。不能修改内容
时间: 2025-01-26 17:37:03