将Const Char添加到Char* c++
Append Const Char to Char* C++
我知道这听起来像是一个初学者的问题,但我从来没有在c++中使用过char*。我总是用字符串。但是Ubuntu 13.10
和NVidia
OpenGL
驱动程序有一个bug,所以我必须使用char*。
我有一个类,它在构造函数中接受const char* folderName
,然后创建编译文件夹中的所有.glsl
文件。我试过strcpy
和strcat
,它们似乎都覆盖。
glProgram *p = new glProgram("phongn");
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("phongn");
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] = ' ';
std::strcat( name, vertex );
}
我也看不出参数包含新行字符有什么意义。为什么参数看起来不像"phong"
?