簡體   English   中英

輸出帶有分隔符的 const char *

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM