如何使用引用调用从C ++中的函数获取char **类型变量的值?

时间:2018-03-07 10:55:40

标签: c++ string pointers char pass-by-reference

我正在尝试使用以下代码打印以下内容:

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;
}

现在我得到一个空字符串。可能是什么原因以及如何解决它?

2 个答案:

答案 0 :(得分:4)

您(至少)两个问题:

  1. 首先,您要p指向本地变量 k
  2. 第二个是更微妙的,并且是重新分配 k丢失您分配的原始内存并使k指向。
  3. 然后,当你有char时,关于字符串永远不会使用char数组或指向std::string的指针。并且您绝不应该在C ++中使用malloc,只能使用newnew[]。如果您需要new[],请考虑使用std::vector代替(当然除了字符串)。

答案 1 :(得分:1)

NO WAY 编写这样的代码遵循任何良好编程标准。如果你认真学习如何编程,你应该放弃这个混乱并重写代码以正确的方式做事。即使在与遗留代码接口时,也不需要这种混乱。

但以下情况&#39;

void func(char**& p) {
    p = new char*;
    *p = new char[8];
    strcpy(*p, "abc");
}

请注意,我不需要使用演员。