[英]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 指向一個字符串,例如:
這是一個字符串。
帶有多條線路。
后來我需要將 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
指向的字符串call2Result
。 例如,如果我想隨着時間的推移存儲所有日志的副本,這可能會導致真正的問題。
解決此問題的一種簡單方法是讓函數返回一個std::string
,這會生成用於初始化它的字符串的深層副本。 這意味着以后對getInfoLogFunction
調用將不會共享相同的底層緩沖區。 然后,您可以通過使用string::c_str()
成員函數將其傳遞給 Python,獲取原始 C 樣式數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.