Может ли sprintf() завершиться с ошибкой?
Не могу найти конкретики. В манах есть описание для целой группы функций *printf. Указано, что возвращается либо число напечатаных символов, либо отрицательное значение в случае ошибки. Более того, списка errno не приводится как для других функций, отсюда ещё большее недопонимание ситуации. Те, которые работают с файловым дескриптором - с ними более-менее понятно, но те, которые работают с буфером ( в том числе sprintf ), с ними у меня нет чёткой ясности, в каких случаях может произойти ошибка.
Ответы (1 шт):
Да, может, если ошибка произойдет при преобразованиии многобайтовых символов в однобайтовую кодировку (я много чего попробовал, кажется, это единственный источник возможной ошибки для sprintf):
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main() {
setlocale(LC_ALL, "C");
wchar_t c = 128;
char buffer[100];
if (sprintf(buffer, "%lc", c) < 0) {
printf("error\n");
}
}
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror -O temp.c && ./a.out error
Цитата из стандарта:
- number of characters written to buffer (not counting the terminating null character), or a negative value if an encoding error (for string and character conversion specifiers) occurred