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

char output[4096];
wsprintf(output, "%s", input); // assume input is a piece of text > 1024 characters
printf(output); // only prints the first 1024 characters

Как сделать так, чтобы все символы из ввода копировались в вывод, превышая ограничение wsprintf в 1024 байта?

Tiger Joe

Ответов: 2

Ответы (2)

Вы можете использовать стандартные функции snprintf и swprintf. У них нет такого ограничения:

char output[4096];
int length = snprintf(output, sizeof output, "%02000d", 1);
 // should print 2000 zeros:
printf("length=%d output=%s\n", length, output);

swprintf - эквивалентная функция для wchar_t:

wchar_t output[4096];
int length = swprintf(output, sizeof output / sizeof *output, "%02000d", 1);
 // should print 2000 zeros:
printf("length=%d output=%Ls\n", length, output);

wsprintf() является устаревшей. Вместо этого используйте одну из Strsafe функций (StringCbPrintf/Ex() или StringCchPrintf/Ex()). Они поддерживают выходной буфер размером до 2 147 483 647 символов (STRSAFE_MAX_CCH).

2022 WebDevInsider