[英]Function argument, const char **, Temp Variable
我想将参数传递给需要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
是否可以在不使用temp变量的情况下做到这一点。
我想直接传递testString.c_str()。
你不能 std :: string :: c_str()返回const char *
。 为了创建一个指向字符串的指针,您必须将其放在变量中并获取其地址。
话虽这么说,我更担心您要将此功能传递给什么功能。 通常,采用const char **
函数这样做有两个原因:
1:需要一个字符串数组。 您正在传递单个字符串。 通常,采用数组的C样式函数需要第二个参数,该参数说明数组中有多少个元素。 希望您在其中输入1。
2:正在返回字符串。 在这种情况下,您所做的根本没有帮助。 您应该创建一个const char *
作为变量,将其初始化为NULL,然后将指针传递给它作为参数。 它的值将由函数填充。
您将需要两个临时变量来调用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);
}
简单-不。
(填满一些空间)
您还可以进行类型转换:
int main()
{
testFunc((const char **)&testString);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.