In many C libraries, there is a printf-style routine which is something like the following:
int __vgprintf(void *info, (void)(*print_function(void*, char)), const char *format, va_list params);
which will format the supplied string and call print_function with the passed-in info value and each character in sequence. A function like fprintf will pass __vgprintf the passed-in file parameter and a pointer to a function which will cast its void* to a FILE* and output the passed-in character to that file. A function like snprintf will create a struct holding a char* and length, and pass the address of that struct to a function which will output each character in sequence, space permitting.
Is there any standard for such a function, which could be used if e.g. one wanted a function to output an arbitrary format to a TCP port? A common approach is to allocate a buffer one hopes is big enough, use snprintf to put the data there, and then output the data from the buffer. It would seem cleaner, though, if there were a standard way to to specify that the print formatter should call a user-supplied routine with each character.
char
at a time looks extremely inefficient. Also usingchar
as a function argument type is usually not advisable.int
would be a lot more appropriate, butchar *
andsize_t
would make more sense. – R.. GitHub STOP HELPING ICE