函数参数,const char **,Temp Variable

时间:2011-06-20 04:44:44

标签: c++

我想将一个参数传递给一个函数,该函数采用 const char **

#include<iostream>

using namespace std;

void testFunc(const char **test){}

string testString = "This is a test string";

int main()
{
    const char *tempC = testString.c_str();

    testFunc(&tempC);

    return 0;
}

此代码工作正常,但我不想通过临时变量 tempC 。我想直接传递 testString.c_str()。如下所示,

int main()
{    
    testFunc(&testString.c_str());

    return 0;
}

但是,它显示错误,

 error C2102: '&' requires l-value

是否可以在不使用临时变量的情况下完成。

4 个答案:

答案 0 :(得分:6)

  

我想直接传递testString.c_str()。

你做不到。 std :: string :: c_str()返回const char *。为了创建一个指向字符串的指针,你必须把它放在一个变量中并取其地址。

话虽这么说,我更关心的是你试图通过这个功能。通常,采用const char **的函数有两个原因:

1:它需要一个字符串数组。您传递的是一个字符串。通常,采用数组的C风格函数需要第二个参数来说明数组中有多少个元素。我希望你在那里放一个。

2:返回字符串。在这种情况下,你所做的事情根本没有帮助。您应该创建一个const char *作为变量,将其初始化为NULL,然后将指针作为参数传递给它。它的值将由函数填充。

答案 1 :(得分:2)

您将需要两个临时变量来调用glShaderSource,因此您可以将它们包装在一个直接接受字符串的函数中。

#include <gl.h>
#include <string>

void setShaderFromString(std::string &instr, GLuint shader)
{
        const GLchar *str[1]; // room for one const GLchar *
        GLint   len[1];       // make this an array, for symmetry

        str[0] = instr.c_str();
        len[0] = instr.length();
        glShaderSource(shader, 1, str, len);

}

答案 2 :(得分:0)

简单 - 不。

(填补一些空间)

答案 3 :(得分:0)

您也可以进行打字:

int main()
{
    testFunc((const char **)&testString);
    return 0;
}