SkillAgentSearch skills...

Snprintf

Lightweight and with minimal dependencies implementation of snprintf() C function.

Install / Use

/learn @mirtoto/Snprintf
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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

  • Mirosław Toton, mirtoto@gmail.com
  • Alain Magloire, alainm@rcsm.ee.mcgill.ca
View on GitHub
GitHub Stars12
CategoryDevelopment
Updated9mo ago
Forks1

Languages

C

Security Score

87/100

Audited on Jun 17, 2025

No findings