C ++将std :: string传递给Pointer-to-C-String参数

时间:2016-06-30 14:36:19

标签: c++ sdl

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

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

但是,我有一个std::string我想要传递,并且这样做会产生错误:

std::string str = "test";
glShaderSource(... , &str.c_str(), ...);

我知道我可以简单地创建一个新的const char*变量并将std::string保存到它:

const char *cstr = str.c_str();

但这有什么办法吗?我不喜欢制作一个新的变量。我尝试使用lambda但是没有用。

2 个答案:

答案 0 :(得分:5)

不,没有办法解决它。

函数glShaderSource需要一个指向字符缓冲区指针的指针(因为它希望你传递一个或更多 C字符串),而你不能获取地址一个右值(表达式str.c_str()是什么)。

但这不是一个真正的问题,因为在你的最后一个例子中,你所做的就是分配一个指向指针的指针。这非常便宜和容易。

不要害怕“制作一个新的变量” - 无论如何命名的东西都很好。

答案 1 :(得分:0)

我认为问题是:为什么函数需要一个指向指针的指针?在许多具有c风格函数的情况下,它们提供这种接口,因为它们想要修改目标指针以指向其他东西(例如由函数内部创建的东西)。如果是这种情况,那么将string::c_str()的结果分配给变量然后将其传入是有点无意义的,因为无论如何它将被重新分配以指向其他东西。

我建议您更彻底地检查此功能的文档,以确保不是这种情况(可能是这种情况)。