我有一个问题,我想从一个具有多行的函数创建一个字符串,我需要获取所有新的行分隔符,以便以后在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 *引用的字符串。
感谢
答案 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样式数组。