### Navigation

- index
- modules |
- next |
- previous |
- Python v3.0 documentation »
- Python/C API Reference Manual »
- Utilities »

# String conversion and formatting

Functions for number conversion and formatted string output.

int `PyOS_snprintf`(char *str, size_t size, const char *format, ...)
  Output not more than size bytes to str according to the format string format and the extra arguments. See the Unix man page snprintf(2).

int `PyOS_vsnprintf`(char *str, size_t size, const char *format, va_list va)
  Output not more than size bytes to str according to the format string format and the variable argument list va. Unix man page vsnprintf(2).

`PyOS_snprintf` and `PyOS_vsnprintf` wrap the Standard C library functions `snprintf` and `vsnprintf`. Their purpose is to guarantee consistent behavior in corner cases, which the Standard C functions do not.

The wrappers ensure that str*[*size-1] is always `'\0'` upon return. They never write more than size bytes (including the trailing `'\0'`) into str. Both functions require that `str != NULL`, `size > 0` and `format != NULL`.

If the platform doesn’t have `vsnprintf` and the buffer size needed to avoid truncation exceeds size by more than 512 bytes, Python aborts with a Py_FatalError.

The return value (rv) for these functions should be interpreted as follows:

- When `0 <= rv < size`, the output conversion was successful and rv characters were written to str (excluding the trailing `'\0'` byte at str*[*rv]).
- When `rv >= size`, the output conversion was truncated and a buffer with `rv + 1` bytes would have been needed to succeed. str*[*size-1] is `'\0'` in this case.
- When `rv < 0`, “something bad happened.” str*[*size-1] is `'\0'` in this case too, but the rest of str is undefined. The exact cause of the error depends on the underlying platform.

The following functions provide locale-independent string to number conversions.

double `PyOS_ascii_strtod`(const char *nptr, char **endptr)

  Convert a string to a `double`. This function behaves like the Standard C function `strtod` does in the C locale. It does this without changing the current locale, since that would not be thread-safe.

  `PyOS_ascii_strtod` should typically be used for reading configuration files or other non-user input that should be locale independent.

  See the Unix man page strtod(2) for details.

char * `PyOS_ascii_formatd`(char *buffer, size_t buf_len, const char *format, double d)

  Convert a `double` to a string using the `'.'` as the decimal separator. format is a `printf`-style format string specifying the number format. Allowed conversion characters are `'e'`, `'E'`, `'f'`, `'F'`, `'g'` and `'G'`.

  The return value is a pointer to buffer with the converted string or NULL if the conversion failed.

double `PyOS_ascii_atof`(const char *nptr)

  Convert a string to a `double` in a locale-independent way.

  See the Unix man page atof(2) for details.

char * `PyOS_stricmp`(char *s1, char *s2)
  Case insensitive comparison of strings. The function works almost identically to `strcmp` except that it ignores the case.

char * `PyOS_strnicmp`(char *s1, char *s2, Py_ssize_t size)
  Case insensitive comparison of strings. The function works almost identically to `strncmp` except that it ignores the case.

### Navigation

- index
- modules |
- next |
- previous |
- Python v3.0 documentation »
- Python/C API Reference Manual »
- Utilities »