---
name: "strcstr"
section: "3pub"
platform: "linux"
package: "publib-dev"
version: "0.40-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/strcstr"
---

# strcstr(3pub)

convert memory block to printable C string notation

## 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)](/isprint/3.md) 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

publib(3), strins(3)

## AUTHOR

Lars Wirzenius (lars.wirzenius@helsinki.fi)
