c ++输出const char * with delimiters

时间:2017-07-04 00:14:50

标签: c++ arrays string pointers

我有一个问题,我想从一个具有多行的函数创建一个字符串,我需要获取所有新的行分隔符,以便以后在Python中进行格式化。

例如:

const char * getInfoLogFunction()
{
static char buffer[4096];
glGetShaderInfoLog(shader, 4096, NULL, buffer);

const char * compileStatus = buffer;
return compileStatus
}

现在compileStatus指向一个字符串,例如:

  

这是一个字符串。

     

有多行。

稍后我需要将compileStatus发送到一个应用程序,该应用程序将整个字符串放入tab分隔表的1个单元格中。使用Python,我需要将单行字符串格式化为多行。如果分隔符在字符串中,我可以很容易地做到,但事实并非如此。

有没有办法可以从compileStatus中获取字符串并将其格式化,以便将所有分隔符都存在?

我在隐式创建字符串时发现了很多例子,例如:

myString = R"xyz(Some String)xyz"

但是我无法找到一种方法来格式化由函数生成的const char *引用的字符串。

感谢

1 个答案:

答案 0 :(得分:0)

让我们来看看这段代码:

const char * getInfoLogFunction()
{
    static char buffer[4096];
    glGetShaderInfoLog(shader, 4096, NULL, buffer);

    const char * compileStatus = buffer; // <--- Here
    return compileStatus; 
}

此函数返回compileStatus,它是指向buffer的指针。因此,每次调用此函数时,都会返回指向同一字符缓冲区的指针。所以,例如,如果我说

const char* call1Result = getInfoLogFunction();

// Time passes, then...
const char* call2Result = getInfoLogFunction();

我有两个指向同一缓冲区的指针,因此call1Result指向的字符串将与call2Result指向的字符串完全相同。例如,如果我想存储所有日志的副本,这可能会导致真正的问题。

解决此问题的一种简单方法是让函数返回std::string,它会生成用于初始化它的字符串的深层副本。这意味着未来对getInfoLogFunction的调用不会共享相同的底层缓冲区。然后,您可以使用string::c_str()成员函数将其传递给Python,然后返回原始的C样式数组。