输出常量字符 * 带分隔符

Output const char * with delimiters

本文关键字:分隔符 字符 常量 输出      更新时间:2023-10-16

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

例如:

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

现在编译状态指向一个字符串,例如:

这是一个字符串。

多行。

稍后我需要将 compileStatus 发送到一个应用程序,该应用程序会将整个字符串放入制表符分隔表的 1 个单元格中。使用Python,我需要将单行字符串格式化为多行。如果分隔符在字符串中,我可以轻松做到这一点,但它们不是。

有没有办法我可以从 compileStatus 中获取字符串并对其进行格式化,以便它存在所有分隔符?

我发现了许多隐式创建字符串的示例,例如:

myString = R"xyz(Some String)xyz"

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

谢谢

让我们看一下这段代码:

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 样式数组。