我正在尝试使用以下代码打印以下内容:
int main() {
char p[] = "hello";
char*t = p;
char**b = &t;
std::string s = b[0];
cout<<"string="<<s<<" b[0]="<<b[0];
}
我得到的输出符合预期:
string = hello b [0] = hello
现在我想用函数调用实现同样的功能,我通过引用传递一个变量:
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;
}
现在我得到一个空字符串。可能是什么原因以及如何解决它?
答案 0 :(得分:4)
您(至少)两个问题:
p
指向本地变量 k
。k
丢失您分配的原始内存并使k
指向。然后,当你有char
时,关于字符串永远不会使用char
数组或指向std::string
的指针。并且您绝不应该在C ++中使用malloc
,只能使用new
或new[]
。如果您需要new[]
,请考虑使用std::vector
代替(当然除了字符串)。
答案 1 :(得分:1)
NO WAY 编写这样的代码遵循任何良好编程标准。如果你认真学习如何编程,你应该放弃这个混乱并重写代码以正确的方式做事。即使在与遗留代码接口时,也不需要这种混乱。
但以下情况&#39;
void func(char**& p) {
p = new char*;
*p = new char[8];
strcpy(*p, "abc");
}
请注意,我不需要使用演员。