第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

具有自動(dòng)內(nèi)存分配的sprintf()?

具有自動(dòng)內(nèi)存分配的sprintf()?

C
回首憶惘然 2019-12-04 09:45:39
我正在尋找一種類似sprintf()的實(shí)現(xiàn),該實(shí)現(xiàn)會(huì)自動(dòng)分配所需的內(nèi)存。所以我想說char* my_str = dynamic_sprintf( "Hello %s, this is a %.*s nice %05d string", a, b, c, d );并且my_str檢索保存此sprintf()結(jié)果的已分配內(nèi)存的地址。在另一個(gè)論壇上,我讀到可以這樣解決:#include <stdlib.h>#include <stdio.h>#include <string.h>int main(){    char*   ret;    char*   a = "Hello";    char*   b = "World";    int     c = 123;    int     numbytes;    numbytes = sprintf( (char*)NULL, "%s %d %s!", a, c, b );    printf( "numbytes = %d", numbytes );    ret = (char*)malloc( ( numbytes + 1 ) * sizeof( char ) );    sprintf( ret, "%s %d %s!", a, c, b );    printf( "ret = >%s<\n", ret );    free( ret );    return 0;}但這在調(diào)用帶有NULL指針的sprintf()時(shí)立即導(dǎo)致段錯(cuò)誤。有什么想法,解決方案或提示嗎?放置在公共域中的類似sprintf()的解析器的一個(gè)小實(shí)現(xiàn)就足夠了,然后我自己完成它。非常感謝!
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是Stack Overflow的原始答案。正如其他人所說,你需要的snprintf不是sprintf。確保的第二個(gè)參數(shù)snprintf是zero。這將阻止snprintf寫入NULL作為第一個(gè)參數(shù)的字符串。


需要第二個(gè)參數(shù),因?yàn)樗黶nprintf表明沒有足夠的空間可用于寫入輸出緩沖區(qū)。當(dāng)沒有足夠的可用空間時(shí),如果有足夠的可用空間,則snprintf返回將要寫入的字節(jié)數(shù)。


從這里的鏈接中復(fù)制代碼...


char* get_error_message(char const *msg) {

    size_t needed = snprintf(NULL, 0, "%s: %s (%d)", msg, strerror(errno), errno) + 1;

    char  *buffer = malloc(needed);

    sprintf(buffer, "%s: %s (%d)", msg, strerror(errno), errno);

    return buffer;

}


查看完整回答
反對(duì) 回復(fù) 2019-12-04
  • 3 回答
  • 0 關(guān)注
  • 629 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)