logo

Funkcia snprintf() v C

V tejto časti sa budeme zaoberať funkciou snprintf() v programovacom jazyku C. Snprintf je preddefinovaná knižničná funkcia hlavičkového súboru stdio.h, ktorá presmeruje výstup štandardnej funkcie printf() do iných vyrovnávacích pamätí.

Funkcia snprint() sa používa na formátovanie daných reťazcov do série znakov alebo hodnôt v oblasti vyrovnávacej pamäte. Funkcia snprintf() obsahuje argument 'n' predstavujúci maximálny počet znakov, vrátane nulového znaku, uložených v oblasti vyrovnávacej pamäte.

Funkcia snprintf tiež vracia počet znakov, ktoré sú vložené alebo zapísané do vyrovnávacej pamäte. Tieto znaky však vráti alebo zobrazí funkcia printf() v príkaze print alebo znaky v hlavičkovom súbore stdout.

Funkcia snprintf() v C

Poznámka: Funkcia snprintf() vloží na koniec výsledného výstupu znak null, ktorý sa tiež počíta ako veľkosť vyrovnávacej pamäte. Okrem toho je vyrovnávacia pamäť pole, ktoré ukladá iba prvky typu znak, nie v type reťazca.

Syntax funkcie snprintf() v C

Nasleduje syntax funkcie snprintf() v programovacom jazyku c.

 int snprintf (char *str, size_t size, const char *format, ?); 

Parametre:

str : Ide o vyrovnávaciu pamäť poľa typu znakov.

veľkosť : definuje maximálny počet znakov, ktoré je možné uložiť do vyrovnávacej pamäte.

formát : V jazyku C reťazec definuje formát, ktorý obsahuje rovnaký typ špecifikácií, aký definuje funkcia printf() v hlavičkovom súbore stdio.h.

…: Je to voliteľný (…) parameter alebo argument.

previesť dátum na reťazec

Návratové hodnoty:

Funkcia snprintf() vracia počet znakov alebo hodnôt, ktoré boli zapísané alebo uložené pre dostatočne veľkú vyrovnávaciu pamäť bez zahrnutia ukončovacieho znaku null. A ak sú zapísané znaky väčšie ako veľkosť vyrovnávacej pamäte, vráti zápornú hodnotu. A ak je veľkosť vyrovnávacej pamäte príliš malá, daný reťazec sa skráti alebo zmenší na veľkosť vyrovnávacej pamäte.

Príklad 1: Program na demonštráciu funkcie snprintf() v C

Vytvorme program na kontrolu veľkosti vyrovnávacej pamäte a pomocou funkcie snprintf() v jazyku C vrátime počet zadaných znakov do vyrovnávacej pamäte.

 /* create an example to use the snprintf function in c. */ #include #include int main () { // declare and initialize the char variable char *r = 'Javatpoint.com'; char buf[100]; // define the size of character type buffer /* use the snprintf() function to return the no. of character founded in the buffer area */ int n = snprintf (buf, 34, '%s 
', r); // 34 represents the size of buffer to store max characters // display the string stored in the buffer and count each character of the buffer area. printf (' The given string is: %s 
 Count the stored character: %d 
', buf, n); return 0; } 

Keď spustíme vyššie uvedený program, vytvorí daný výstup na obrazovke konzoly.

 The given string is: Javatpoint.com Count the stored character: 16 

2ndexekúcie

 The given string is: Javatpoint.com Count the stored character: -1 

Teraz znížime maximálny vstupný znak z 34 na 14 a tentoraz vráti záporné číslo, čo znamená, že veľkosť vyrovnávacej pamäte je menšia ako daný reťazec.

Príklad 2: Program na použitie funkcie snprintf() v C

Vytvorme príklad na vloženie znaku do vyrovnávacej pamäte a návrat z nej pomocou funkcie snprintf() v programovacom jazyku C.

 #include #include int main () { char buf[200]; // define the size of character type buffer int ret_val, buf_size = 55; char name[] = &apos;David&apos;; // define string int age = 19; // use the snprintf() function to return the no. of character found in buffer area ret_val = snprintf (buf, buf_size, &apos;Hello friend, My name is %s, and I am %d years old.&apos;, name, age); /* check ret_value should be greater than 0 and less than the size of the buffer (buf_size). */ if ( ret_val &gt; 0 &amp;&amp; ret_val <buf_size) { printf (' buffer is written successfully! 
 '); %s
', buf); no. of characters read: %d', ret_val); } else not completely filled or written. %s 
', the return value: 0; < pre> <p> <strong>When we execute the above program, it produces the given output on the console screen.</strong> </p> <pre> Buffer is written successfully! Hello friend, My name is David, and I am 19 years old. No. of characters read: 53 </pre> <p>In the above program, we declared the character type buffer buf[200], and the buf_size variable can insert the maximum characters is 55. If the given statement is in the defined range, the snprintf() function returns the total no. of characters read from the buffer. </p> <p> <strong>2<sup>nd</sup> execution</strong> </p> <pre> Buffer is not completely filled or written. Hello friend, My name is David and The return value: -1 </pre> <p>When we define the buf_size as 35, the given statement is automatically truncated by the snprintf() function that returns a negative number (-1) and displays &apos;Buffer is not completely filled or written&apos;.</p> <hr></buf_size)>

Vo vyššie uvedenom programe sme deklarovali znakový typ buffer buf[200] a premenná buf_size dokáže vložiť maximálny počet znakov je 55. Ak je daný príkaz v definovanom rozsahu, funkcia snprintf() vráti celkový počet. znakov načítaných z vyrovnávacej pamäte.

2ndexekúcie

 Buffer is not completely filled or written. Hello friend, My name is David and The return value: -1 

Keď definujeme buf_size ako 35, daný príkaz je automaticky skrátený funkciou snprintf(), ktorá vráti záporné číslo (-1) a zobrazí 'Buffer nie je úplne vyplnený alebo zapísaný'.