Skip to content

mirtoto/snprintf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

snprintf()

Lightweight and with minimal dependencies implementation of snprintf() C function. Especially it is independend from mathematical functions from math.h which are not always available for embedded platforms.

From many years I was using almost unchanged orginal implementation of Alain Magloire (v1.1) but last time I needed replacement of snprintf() function more compliant with standard implementation.

Function prototype

int snprintf(char *string, size_t length, const char *format, ...);

Input parameters

Parameter Description
string Output buffer.
length Size of output buffer string.
format Format of input parameters.
... Input parameters according to format.

Return values

Value Description
>=0 Amount of characters put (or would be put in case of string is set to NULL) in string.
-1 Output buffer string size is too small.

How to use it

Just copy src/snprintf.c & include/snprintf.h to your project and include snprintf.h in your code.

#include <stdio.h>

#include "snprintf.h"
  
int main(int argc, char *argv[]) {
  const char *hello = "Hello", *world = "World";
  char msg[0x100] = "";

  snprintf(msg, sizeof(msg), "%s %s!", hello, world);
  printf("%s\n", msg);
  
  return 0;
}

In src/tests-snprintf.c & include/tests-snprintf.h you can find set of tests based on MinUnit engine, which can be run by tests_snprintf() function.

#include "tests-snprintf.h"

int main(void) {
  return tests_snprintf();
}

Supported format specifiers

Supportted types

Type Description
d / i signed decimal integer
u unsigned decimal integer
o unsigned octal integer
x / X unsigned hexadecimal integer
f / F decimal floating point
e / E scientific (exponential) floating point
g / G scientific or decimal floating point
c character
s string
p pointer
% percent character

Supported lengths

Length Description
hh signed / unsigned char
h signed / unsigned short
l signed / unsigned long
ll signed / unsigned long long

Supported flags

Flag Description
- justify left
+ justify right or put a plus if number
# prefix 0x, 0X for hex and 0 for octal
* width and/or precision is specified as an int argument
0 for number padding with zeros instead of spaces
(space) leave a blank for number with no sign

Authors