Hat Android nicht wirklich wchar_t?

Baute ich eine einfache Methode wie unten

wchar_t buf[1024] = {};
void logDebugInfo(wchar_t* fmt, ...)
{  
    va_list args;
    va_start(args, fmt);
    vswprintf( buf, sizeof(buf), fmt, args);
    va_end(args);
}

jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                              jobject thiz )
{
    logDebugInfo(L"test %s, %d..", L"integer", 10);
    return (*env)->NewStringUTF(env, buf);
}

Bekam ich folgende Warnung

In der Funktion 'Java_com_example_hellojni_HelloJni_stringfromjni':

warning: passing argument 1 of 'logDebugInfo' from incompatible pointer type

Hinweis: erwartet 'wchar_t *' but argument ist vom Typ 'unsigned int *'

Und der resultierende string nicht korrekt war.
Wenn ich entfernt, die L Präfix vor, dass die Formatierung string, komisch, es hat funktioniert. Aber L-Präfixe verwendet wurden überall in meinem legacy-code.

Erste den ich kenne wchar_t ist nicht handlich genug und ist sehr compiler-spezifisch. Die Größe von wchar_t ich erwartet, war ja auch 16 bit. Ich habe einige andere Beiträge, die sagte, es ist 32 bit bei android, aber wchar.h, durch Staatliche NDK, hieß es wchar_t == char, wirklich?

  • btw, ich bin targeting android 1.6 und höher
  • Prüfen Sie diese Frage ALSO: stackoverflow.com/questions/5008616/...
  • Schon versucht, fshort-wchar hat bei mir nicht funktioniert, keine Ahnung 🙁
  • Getestet habe ich die Größe von wchar_t auf android durch die Verwendung von sizeof, es war 1...
InformationsquelleAutor fifth | 2011-04-12
Schreibe einen Kommentar