【发布时间】:2011-08-28 04:46:36
【问题描述】:
我有以下代码:
glShaderSource(shader, 1, (const char **)data.c_str(), NULL);
但这会使我的程序崩溃。如何将 std::string 转换为 const char ** ?
我也试过(const char **)&,但它说“需要左值”,我不明白。当我使用此代码时它工作正常:
const char *data = "some code";
glShaderSource(shader, 1, &data, NULL);
但我不能直接通过std::string 让它工作。我可以为它分配一个新的char 数组,但这不是很好的代码。
我也试过const GLchar,但显然没有区别。
【问题讨论】:
-
查看该函数的文档。必须有一个原因它需要一个指向指针的指针。假设这是一个输出参数,函数写入一个
char*到取消引用的char**。在这种情况下,您需要传递真实指针的地址,而不是std::string::c_str()返回的一些临时地址。 -
@sbi: 这不是一个输出参数,它需要一个 c 字符串数组。
-
@Benjamin:啊,是的,我忘记了这种可能性。
-
我认为这个问题又是一个“为什么我不能……”,而真正的问题应该是“你为什么想要?”。您正在转换为不兼容的指针类型。它不应该工作。我认为它应该让你停止并思考你对
glShaderSource不了解的地方。 15 秒的谷歌会告诉你第三个参数“指定一个指针数组,指向包含要加载到着色器中的源代码的字符串。”。您的问题的标题完全具有误导性:您不能进行这样的转换。