【发布时间】:2018-08-15 10:52:16
【问题描述】:
我正在尝试使用以下代码打印以下内容:
int main() {
char p[] = "hello";
char*t = p;
char**b = &t;
std::string s = b[0];
cout<<"string="<<s<<" b[0]="<<b[0];
}
我得到的输出符合预期:
字符串=你好 b[0]=你好
现在我想使用一个函数调用来实现同样的事情,在该函数调用中我通过引用传递一个变量:
void func(char**& p) {
char *k = (char*)malloc(8*sizeof(char));
k = (char*)"abc";
p = &k;
}
int main() {
char**j = NULL;
func(j);
std::string s1 = j[0];
cout<<s1;
}
现在我得到一个空字符串。可能是什么原因以及如何解决?
【问题讨论】:
-
阅读good C++ book。暂时别管指针,改用
std::vector和std::string -
虽然代码中存在多个问题,但我在VS2017中运行了您的代码,它确实打印了“abc”。所以,我想知道你在说哪个空字符串?
-
是的,@PasserBy 是正确的。要么使用具有所有现代特性的 C++,要么使用 C。
-
@VishaalShankar 之所以称为未定义行为是有原因的
-
我认为您在上一个问题中被告知使用强制转换几乎总是错误的。嗯,这次也错了。
标签: c++ string pointers char pass-by-reference