2009-05-21 67 views
2

我正面臨一個奇怪的問題。我正在使用sprintf或swprintf根據構建定義使用或不使用unicode。我已經包裹在我自己的函數這些函數是這樣的:從單獨的庫調用swamp失敗

int mysprintf(MCHAR* str,size_t size, const MCHAR* format, ...) 
{ 
#ifdef MYUNICODE 
    return swprintf(str, size, format); 
#else 
    return snprintf(str, format); 
#endif 
} 

這些功能是在一個字符串類,這是一個獨立的項目,並編譯成一個lib。我在另一個程序中使用它。現在如果我使用mysprintf()

msprintf(str,10, _M("%d,%d"),height,width); 

我在字符串緩衝區中得到了一些垃圾值。但是如果我直接從程序中調用swprintf函數,那麼它會工作得很好。我已經在構建中定義了UNICODE,並且swprintf確實調用了函數,但它填充了一些垃圾值。我不明白髮生了什麼問題。

感謝 阿米特

回答

1

問題的確在於你有自己的函數可變數量的參數。您需要獲取一個指向參數列表的指針並將其傳遞給被調用者。 va_start使你能夠做到這一點,它需要參數列表中的最後一個指針到你的函數。

int mysprintf(MCHAR* str, size_t size, const MCHAR* format, ...) 
    { 
     va_list args; 
     va_start(args, format); 

     int result; 

    #ifdef MYUNICODE 
     result = vswprintf(str, size, format, args); 
    #else 
     result = .. 
    #endif 

     va_end(args); 

     return result; 
    } 

乾杯!

+0

感謝Magnus,這清除了這個概念。 – amit 2009-05-21 10:34:23