У Android действительно нет wchar_t?

Я создал простой метод, как показано ниже

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);
}

Я получил следующее предупреждение

В функции 'Java_com_example_hellojni_HelloJni_stringFromJNI':
предупреждение: передача аргумента 1 logDebugInfo из несовместимого типа указателя
примечание: ожидалось 'wchar_t *', но аргумент имеет тип 'unsigned int *'

И результирующая строка была неверной. Если бы я удалил этот префикс L перед этой строкой форматирования, как ни странно, это сработало. Но префиксы L использовались повсюду в моем устаревшем коде.

Во-первых, я знаю, что wchar_t недостаточно переносим и сильно зависит от компилятора. Я ожидал, что размер wchar_t должен быть 16 бит. Я читал некоторые другие сообщения, в которых говорилось, что это 32 бита для Android, но wchar.h, предоставленный официальным NDK, сказал: wchar_t == char, правда?

7
задан Anoop CH 12 April 2011 в 04:31
поделиться