将Const Char附加到Char * C ++

时间:2014-03-29 13:50:52

标签: c++ string char

我知道这听起来像是一个初学者问题,但我从未使用c ++中的char *。我总是只使用字符串。但Ubuntu 13.10NVidia OpenGL驱动程序存在错误,因此我必须使用char *。 Here是错误。

我有一个类在构造函数中使用const char* folderName,然后创建编译文件夹中的所有.glsl文件。我尝试了strcpystrcat,但他们似乎都是如此重写。

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

1 个答案:

答案 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"