Ce face std::snprintf
snprintf formatează la fel ca printf, dar pune rezultatul în tabloul destinatie. Scrie cel mult marime - 1 caractere și pune mereu '\0' la final, deci nu depășește tabloul.
Returnează lungimea pe care ar fi avut-o textul complet. Dacă valoarea este mai mare sau egală cu marime, textul a fost tăiat. Cu destinatie = nullptr și marime = 0 afli doar câte caractere ar fi necesare.
Parametri
| Parametru | Descriere |
|---|---|
destinatie |
Tabloul în care se scrie. |
marime |
Mărimea tabloului, inclusiv locul pentru '\0'. |
format, ... |
Șablonul și valorile, ca la printf. |
Ce returnează
Lungimea textului complet (fără '\0'), chiar dacă a fost tăiat.
Exemple
Exemplul 1: Un nume de fișier construit cu numere
#include <cstdio>
int main() {
char nume_fisier[32];
for (int luna = 8; luna <= 10; ++luna) {
std::snprintf(nume_fisier, sizeof(nume_fisier), "raport_2026_%02d.csv", luna);
std::puts(nume_fisier);
}
}
Rezultat
raport_2026_08.csv
raport_2026_09.csv
raport_2026_10.csv
Exemplul 2: Text tăiat în siguranță
#include <cstdio>
int main() {
char mic[16];
int necesar = std::snprintf(mic, sizeof(mic), "Total: %.2f lei", 1299.5);
std::printf("[%s] necesar %d, încăput %zu\n", mic, necesar, sizeof(mic) - 1);
if (necesar >= static_cast<int>(sizeof(mic))) {
std::printf("Textul a fost tăiat\n");
}
}
Rezultat
[Total: 1299.50 ] necesar 18, încăput 15
Textul a fost tăiat
Greșeli frecvente
- Folosești
sprintf(fărăn): nu știe mărimea tabloului și îl poate depăși. Pe macOS este chiar marcată ca învechită. - Ignori valoarea returnată și nu observi că textul a fost tăiat.
Comenzi înrudite
std::printf: Afișează text formatat în stil C, cu marcaje precum %d, %s, %.2f.std::format_to: Scrie textul formatat direct într-un iterator de ieșire, de exemplu la finalul unui șir.std::to_chars: Scrie un număr ca text într-un tablou de char, foarte rapid, fără alocări și fără excepții.std::strcpy: Copiază (strcpy, strncpy) sau lipește (strcat) șiruri C în tablouri de char.