Вы передаете указатель на 6-элементный массив char
на swprintf
, который ожидает указатель wchar_t
в качестве первого аргумента и количество символов (не байтов) для записи в качестве второго аргумента.
wchar_t
вероятно больше, чем char
, возможно sizeof(wchar_t) == 2
.Поэтому буфер, переданный в качестве первого аргумента, должен иметь размер не менее sizeof(wchar_t)*6
(вероятно, 12
).Это не тот случай (sizeof(char)
всегда 1
, поэтому sizeof(array) == 6
), поэтому у вас переполнение буфера.
Не смешивайте операции char
и wchar_t
.Либо используйте wchar_t
и swprintf
вместе, либо используйте char
и sprintf
вместе.
Включите предупреждения (например, -Wall -Wextra
в gcc / clang) и проследите за каждым из них.Проблему легко определить следующим образом:
<source>:11:20: warning: passing argument 1 of 'swprintf' from incompatible pointer type [-Wincompatible-pointer-types]
(void)swprintf(array, 6,get_wide_char((void *)"%0d"), 40);
^~~~~