我想将一个参数传递给一个函数,该函数采用 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
是否可以在不使用临时变量的情况下完成。
答案 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;
}