我知道这听起来像是一个初学者问题,但我从未使用c ++中的char *。我总是只使用字符串。但Ubuntu 13.10
和NVidia
OpenGL
驱动程序存在错误,因此我必须使用char *。 Here是错误。
我有一个类在构造函数中使用const char* folderName
,然后创建编译文件夹中的所有.glsl
文件。我尝试了strcpy
和strcat
,但他们似乎都是如此重写。
glProgram *p = new glProgram("phong\n");
glProgram :: glProgram(const char* folderName)
{
cout << folderName << endl;
char* name = strdup(folderName);
cout << name << endl;
name = strcat(name,"/vertex.glsl");
cout << name << endl;
}
但输出并不像预期的那样。
phong
phong
/vertex.glsl
如何将输出设为phong/vertex.glsl
?
答案 0 :(得分:3)
代码无效,因为您覆盖了不属于动态分配的数组的内存。你应该自己分配一个足够大的内存区域来包含连接的字符串。
glProgram *p = new glProgram("phong\n");
glProgram :: glProgram(const char *folderName)
{
const char *vertex = "/vertex.glsl";
size_t n = std::strlen( folderName );
if ( n != 0 && folderName[n - 1] == '\n' ) --n;
char *name = new char[n + std::strlen( vertex ) + 1];
std::strncpy( name, folderName, n );
name[n] = '\0';
std::strcat( name, vertex );
}
此外,我没有看到任何意义上该参数包含新行字符。为什么参数看起来不像"phong"
?