我知道这听起来像是一个初学者的问题,但我从未在c ++中使用过char *。我总是只使用字符串。但是Ubuntu 13.10
和NVidia
OpenGL
驱动程序存在错误,因此我必须使用char *。这是错误。
我有一个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
?
该代码无效,因为您将覆盖不属于动态分配的数组的内存。您应该自己分配一个足以容纳串联字符串的内存区域。
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"
?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句