printf выводит кракозябры

В соседней функции выводит нечто:

HPDF_Page_TextOut (page, 10, height - 40, datetime);

// Вывод

H옾 @

Вот код функции, которая генерирует дату/время:

int datetime(void)
{

   setlocale(LC_ALL, ".UTF-8");

   time_t t;
   time(&t);
   printf("%s\n", ctime(&t));

   return 0;
    
}

Если закавычить setlocale(LC_ALL, ".UTF-8");, то выводит:

H예|$袻H|$蘻HǨ

:)


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

В коде HPDF_Page_TextOut (page, 10, height - 40, datetime) функция datetime не вызывается. Указатель на функцию передаётся в качестве строки для печати. Вы печатаете код функции до первого нуля в нём. Когда вы "кавычите" строку, вы меняете код и меняете то что попадает в PDF.

Вызов datetime() ситуацию не исправит. Функция должна возвращать строку, а она возвращает целое число ноль.

Исправить можно так:

const char *datetime(void)
{
   time_t t;
   time(&t);
   char *s = ctime(&t);
   s[strlen(s) - 1] = '\0';  /* remove trailing '\n' */
   return s;
}

...

    HPDF_Page_TextOut(page, 10, height - 40, datetime())
→ Ссылка