logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

strcstr - convert memory block to printable C string notation

Author

       Lars Wirzenius (lars.wirzenius@helsinki.fi)

Publib                                        C Programmer's Manual                                STRCSTR(3pub)

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.

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;
            }

Name

       strcstr - convert memory block to printable C string notation

Return Value

strcstr returns nothing.

See Also

publib(3), strins(3)

Synopsis

       #include <publib.h>
       void strcstr(char *str, size_t max, const void *block, size_t n);

See Also