Функция ICU4C austrdup

Я пытаюсь запустить демонстрацию кода для ICU4C ниже и получаю

предупреждение: неявное объявление функции 'austrdup'

которые впоследствии приводят к ошибке. Я понимаю, что это связано с отсутствующей импортированной библиотекой, содержащей функцию austrdup, и я смотрел исходный код, чтобы угадать, какая это, но не повезло. Кто-нибудь знает, какой из них следует импортировать?

#include <unicode/umsg.h>
#include <unicode/ustring.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char const *argv[])
{
    UChar* str;
    UErrorCode status = U_ZERO_ERROR;
    UChar *result = NULL;
    UChar pattern[100];

    int32_t resultlength, resultLengthOut, i;
    double testArgs[] = { 100.0, 1.0, 0.0};
    str=(UChar*)malloc(sizeof(UChar) * 10);
    u_uastrcpy(str, "MyDisk");
    u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");

    for(i=0; i<3; i++){
        resultlength=0; 
        resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str); 
        if(status==U_BUFFER_OVERFLOW_ERROR){ //check if output truncated
            status=U_ZERO_ERROR;
            resultlength=resultLengthOut+1;
            result=(UChar*)malloc(sizeof(UChar) * resultlength);
            u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);
        }
        printf("%s\n", austrdup(result) );  //austrdup( a function used to convert UChar* to char*)
        free(result);
    }
    return 0;
}

1 ответ

Решение

austrdupне является официальным методом интенсивной терапии. Он используется только тестами в отделении интенсивной терапии и определен в icu4c/source/test/cintltst/cintltst.h и реализовано в icu4c/source/test/cintltst/cintltst.c. В основном это просто обертка вокруг u_austrcpy.

Другие вопросы по тегам