2016-05-09 9 views
-1

In Xcode nur (Visual Studio ist in Ordnung), sehe ich Swprintf brechen, wenn Sie versuchen, es in eine Wrapper-Funktion mit va_args zu setzen.va_args bricht breite String-Funktionen (swprintf) in XCode

Vereinfachtes Beispiel:

void test(wchar_t *a_buffer, int a_buffer_size, const wchar_t* a_format, ...) 
{ 
    va_list args; 
    va_start(args, a_format); 
    ::swprintf(a_buffer, a_buffer_size, a_format, args); 
    va_end(args); 
} 

double value = 1.0; 
wchar_t text[32]; 
::swprintf(text, 32, L"%f", value); // this works (text=L"1.0000") 

test(text, 32, L"%f", 30.0); // this does not work (text=L"0.0000") 

Jede Hilfe dankbar, es ist ein ziemlicher stumper. Ich gehe davon aus, dass das Problem mit einer Eigenart von XCode ist.

Ich habe bereits mit Locale-Einstellungen und Dateieigenschaften wie in dieser Frage vorgeschlagen: swprintf fails with unicode characters in xcode, but works in visual studio, aber es hat keine Änderung ergeben, es sieht aus wie ein separates Problem.

Danke.

+6

'swprintf()' nimmt _not_ nicht ein Argument. Du meinst 'vswprintf()' zu verwenden. – mah

+0

vswprintf() ist in der Tat, was ich brauchte, danke. –

Antwort

1

Wenn Sie ein va_list Objekt zu übergeben wollen, dann verwenden

int vswprintf(
    const wchar_t* buffer, 
    size_t bufsz, 
    const wchar_t* format, 
    va_list vlist); 

Die Hinter ... bedeutet nur, ihr Argument in der Länge variieren können, aber es bedeutet nicht, dass Sie direkt ein va_list Objekt passieren könnte .

+0

Das war in der Tat mein Problem, ich dachte va_list könnte an ... Funktionen übergeben werden. Mit vswprintf innerhalb der test() - Funktion gelöst, danke. –