输出常量字符 * 带分隔符
Output const char * with delimiters
我有一个问题,我想获取一个从具有多行的函数创建的字符串,我需要在其中获取所有新的行分隔符以供以后在 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 样式数组。
相关文章:
- 带有多个字符分隔符的正则表达式
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 使用连续分隔符和空最后一个字符进行拆分
- 在 std::getline() 上使用任何字符作为分隔符
- 输出常量字符 * 带分隔符
- 在独立模式 c++ 中分隔符处拆分字符*
- C++:使用't'分隔符分隔字符*
- 在 C++ 中用单字符分隔符拆分字符串
- 将 strtok 分隔符设置为两个字符
- 如何通过从后到前搜索分隔符来读取字符数组
- 递增由不同分隔符分隔的字符数组中的数字
- 对字符串流使用本地小数分隔符,但不使用分组字符
- 提升精神 - 修剪最后一个字符和分隔符之间的空格
- C++ 中的字符串标记化,包括分隔符字符
- 如何在文本文件中指定分隔符后将句子的所有首字母字符大写
- 使用字符串流标记字符串,其中最后一个字符是分隔符
- 带有字符串分隔符或两个字符的fstream
- 为什么字符上有分隔符?基于c
- 在Linux下使用连字符或下划线作为文件的分隔符
- 在c++中使用多个多字符分隔符拆分字符串