C++ C++;将std::string传递到指向C-string参数的指针

C++ C++;将std::string传递到指向C-string参数的指针,c++,sdl,C++,Sdl,我使用的是SDL中的一个函数,其中一个参数的类型是const GLchar*const*,因此为了调用它,我需要传入一个C字符串的引用,如下所示: const char *str = "test"; glShaderSource(... , &str, ...); const char *cstr = str.c_str(); 但是,我想传入一个std::string,这样做会产生错误: std::string str = "test"; glShaderSource(... , &

我使用的是SDL中的一个函数,其中一个参数的类型是
const GLchar*const*
,因此为了调用它,我需要传入一个C字符串的引用,如下所示:

const char *str = "test";
glShaderSource(... , &str, ...);
const char *cstr = str.c_str();
但是,我想传入一个
std::string
,这样做会产生错误:

std::string str = "test";
glShaderSource(... , &str.c_str(), ...);
我知道我可以简单地创建一个新的
const char*
变量,并将
std::string
保存到它,如下所示:

const char *str = "test";
glShaderSource(... , &str, ...);
const char *cstr = str.c_str();

但是有什么办法可以解决这个问题吗?我不喜欢做一个新的变量。我试过用lambda,但没用。

不,没办法

函数
glShaderSource
需要一个指向字符缓冲区指针的指针(因为它希望您传递一个或多个C字符串),并且您不能获取右值的地址(这就是表达式
str.C_str()
的内容)

但这并不是一个真正的问题,因为在最后一个示例中,您所做的只是将一个指针分配给一个指针。这是非常便宜和容易的


不要害怕“创建一个新变量”——命名东西无论如何都是好的。

我认为问题是:为什么函数需要一个指向指针的指针?在许多使用c风格函数的情况下,它们提供这种接口是因为它们希望修改目标指针以指向其他对象(例如函数内部创建的对象)。如果是这种情况,那么将
string::c_str()
的结果赋给一个变量,然后将其传入是毫无意义的,因为它将被重新赋给指向其他对象


我建议您更彻底地检查此函数的文档,以确保情况并非如此(可能是这样)。

问题:“其中一个参数的类型为
const GLchar*const*
”。如果您查找该函数,您会发现这是因为它需要一个指向字符串的指针数组。也就是说,如果您查看了文档,您会发现这个答案根本没有解决这个问题。:)但请稍等一下@LightnessRacesinOrbit。在你的评论之后,我确实检查了文档,它表明我完全正确。正如我所怀疑的,该参数实际上是一个输出参数(请参阅)。我的答案有什么问题?对不起,文档的哪一部分说这是一个输出参数?这似乎是我想象中的一点。哎呀,这是个骗局。