vsnprintf und gcc

Habe ich die folgende Anweisung:

vsnprintf(target, size - 1, "%ls_%ls", str16_1, str16_2);

Warum wird dies nicht auf gcc?

Habe ich es auf Windows so:

vsnprintf(target, size - 1, "%S_%S", str16_1, str16_2);

und es funktioniert wie erwartet. Auf der gcc-Dokumentation habe ich gefunden, dass "%S " ist synonym mit %ls, aber ich muss es nicht verwenden. Ich habe versucht, auch mit %S, aber nicht funktioniert. Ich benutze diese in eine Funktion mit variabler Argumentliste. Ist es möglich, nicht zu arbeiten, weil ich das format variable, die ich übergeben, um va_start? Ich muss suchen, %S und ersetzen Sie es mit %ls in der format-Variablen.

Die Funktion ist etwas wie:

void f(const char* format, ...){
  char* new_format = format with %S replaced with %ls;
  va_list argptr;
  va_start(args, format);
  vsnprintf(str, size-1, new_format, argptr);
}

Habe ich überprüft und new_format korrekt ist.

Danke!

  • Felics, für die Zukunft, bitte code einfügen, indem Sie vier Leerzeichen (oder verwenden Sie den 101010 - button über dem editor-Fenster).
  • "Wissen Sie, warum das scheitert an gcc?" Nein, aber ich könnte es denke ziemlich gut, wenn ich weiß, wie es funktioniert nicht. Tut es nicht kompilieren? Verursacht Abstürze? Tut es unerwartete Ergebnisse?
  • Es ergibt unerwartete Ergebnisse(leere Zeichenfolge)
  • Also, was sind str16_1 und str16_2, und wo ordnen Sie Ihre Werte? Genau wie werden Sie untersucht die Ausgabe? Warum tun Sie zeigen, dass Sie der übergabe von strings an vsnprintf in Ihren Beispielen, gegeben, dass sollte nicht auch kompilieren?
  • str16_1 und str16_2 sind ein Beispiel dafür, wie das, was argptr wäre im inneren f () - Funktion, um zu wissen, dass ich mit 16 bit chars.
  • Abgesehen von der verwirrenden snprintf mit vsnprintf, Ihr problem ist, dass 16-bit-wchar_t ist ein Fehler nur unter Windows. Sane-Systemen ein 32-bit-wchar_t in der Lage repräsentieren alle Unicode.
  • Ersetzen va_start(args, format); mit va_start(args, new_format); und das Programm sollte funktionieren. Auch, hinzufügen va_end(args); am Ende. Bitte siehe typische vsnprintf Programm finden Sie hier.

InformationsquelleAutor Felics | 2010-07-29
Schreibe einen Kommentar