shaderLoader函数检索String,然后使用c_str()将其转换为const char。但由于某种原因,c未定义。任何提示?
static const GLchar * c[1000];
*c = shaderLoader("C:\\Users\\Dozent-01\\Desktop\\User\\CG\\bin\\vertShader.txt").c_str();
glShaderSource(vertex_shader, 1, c, NULL);
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为c_str()
的行为与std::string::c_str()
的行为相同。这不是 covnert 任何东西。它为您提供了一个指向存储在字符串中的数据的指针,只有在字符串本身保持活动且未更改时才有效。
我还假设shaderLoader()
返回一个临时对象。您获取指向其数据的指针并将该指针存储在c[0]
中。在该表达式的末尾,临时被破坏,因此指针不再指向有效数据。它晃来晃去。
您必须复制数据,而不仅仅是存储指针。像这样:
auto str = shaderLoader("whatever");
c[0] = new GLchar[str.size() + 1];
strcpy(c[0], str.c_str());
// don't forget to delete[] the memory when no longer needed
当然,还有一个问题是为什么你有一个1000个指向cosnt GLchar
的数组。我怀疑你实际上意味着c
是存储字符串的字符的缓冲区。如果是这样,你可以改变这样的代码:
static const GLchar c[1000];
strncpy(c, shaderLoader("whatever").c_str(), sizeof(c));