STRCSTR(3pub)
NAME
strcstr - convert memory block to printable C string notation
SYNOPSIS
#include <publib.h> void strcstr(char *str, size_t max, const void *block, size_t n);
DESCRIPTION
strcstr converts the contents of an arbitrary memory block (which need
not be a zero terminated string) into a printable notation using normal
C string literal syntax. This can be used for example to store potentially binary data in a file, or in debugging outputs.
All characters for which there is a simple shorthand escape sequence
(', ", ?, \, \a, \b, \f, \n, \r, \t, \v) are stored using that notation. \0 is stored as \0. All other non-printable characters are
stored using a hexadecimal escape sequence. All other printable characters are stored as is.
The isprint(3) macro is used to determine whether a character is printable (i.e., whether it is printed as is, or using special notation).
Therefore, the output depends on the locale.
RETURN VALUE
strcstr returns nothing.
EXAMPLE
- The following code dumps input to the standard output in a guaranteed (modulo locale bugs) printable format. It might be used for debugging.
- #include <stdio.h>
#include <publib.h> - int main(void) {
char line[512];
char cstr[512*(CHAR_BIT/4+1+2)+1]; /* +2 for \x, +1 for \0,the rest to be able to
store the hex code for
512 chars. */ - while (fgets(line, sizeof(line), stdin) != NULL) {
- strcstr(cstr, sizeof(cstr), line, strlen(line));
printf("%s0, cstr); - }
return 0; - }
SEE ALSO
AUTHOR
- Lars Wirzenius (lars.wirzenius@helsinki.fi)