将Const Char添加到Char* c++

Append Const Char to Char* C++

本文关键字:Char c++ 添加 Const      更新时间:2023-10-16

我知道这听起来像是一个初学者的问题,但我从来没有在c++中使用过char*。我总是用字符串。但是Ubuntu 13.10NVidia OpenGL驱动程序有一个bug,所以我必须使用char*。

我有一个类,它在构造函数中接受const char* folderName,然后创建编译文件夹中的所有.glsl文件。我试过strcpystrcat,它们似乎都覆盖。

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" ?