logo

funció snprintf() en C

En aquesta secció, parlarem de la funció snprintf() en el llenguatge de programació C. El snprintf és una funció de biblioteca predefinida del fitxer de capçalera stdio.h, que redirigeix ​​la sortida de la funció estàndard printf() a altres buffers.

La funció snprint() s'utilitza per formatar les cadenes donades en una sèrie de caràcters o valors a l'àrea de memòria intermèdia. La funció snprintf() conté un argument 'n' que representa el nombre màxim de caràcters, inclòs el caràcter nul, emmagatzemats a l'àrea de memòria intermèdia.

La funció snprintf també retorna el nombre de caràcters que s'insereixen o s'escriuen a la memòria intermèdia. Tanmateix, la funció printf() retorna o mostra aquests caràcters a la instrucció d'impressió o els caràcters del fitxer de capçalera stdout.

funció snprintf() en C

Nota: La funció snprintf() insereix un caràcter nul al final de la sortida resultant que també es compta com a mida de la memòria intermèdia. A més, el buffer és una matriu que només emmagatzema elements de tipus caràcter, no en el tipus de cadena.

Sintaxi de la funció snprintf() en C

A continuació es mostra la sintaxi de la funció snprintf() en el llenguatge de programació c.

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

Paràmetres:

str : és una memòria intermèdia de tipus de caràcter.

mida : defineix el nombre màxim de caràcters que es poden emmagatzemar a la memòria intermèdia.

format : En llenguatge C, la cadena defineix un format que conté el mateix tipus d'especificacions que la funció printf() defineix al fitxer de capçalera stdio.h.

…: És un paràmetre o argument opcional (…).

Valors de retorn:

La funció snprintf() retorna el nombre de caràcters o valors que s'han escrit o emmagatzemat per a un buffer prou gran sense incloure el caràcter de finalització nul. I si els caràcters escrits són més grans que la mida de la memòria intermèdia, retorna un valor negatiu. I si la mida de la memòria intermèdia és massa petita, la cadena donada es truncarà o es reduirà a la mida de la memòria intermèdia.

Exemple 1: programa per demostrar la funció snprintf() en C

Creem un programa per comprovar la mida de la memòria intermèdia i retornar el nombre de caràcters introduïts a la memòria intermèdia mitjançant la funció snprintf() a C.

 /* 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; } 

Quan executem el programa anterior, produeix la sortida donada a la pantalla de la consola.

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

2ndexecució

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

Ara reduïm el caràcter d'entrada màxim de 34 a 14, i aquesta vegada, retorna un nombre negatiu, que indica que la mida de la memòria intermèdia és menor que la cadena donada.

Exemple 2: programa per utilitzar la funció snprintf() en C

Anem a crear un exemple per inserir el caràcter a la memòria intermèdia i tornar del mateix utilitzant la funció snprintf() en llenguatge de programació 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)>

Al programa anterior, vam declarar el tipus de caràcter buffer buf[200], i la variable buf_size pot inserir el màxim de caràcters és 55. Si la instrucció donada es troba en l'interval definit, la funció snprintf() retorna el número total. de caràcters llegits de la memòria intermèdia.

2ndexecució

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

Quan definim buf_size com a 35, la funció snprintf() trunca automàticament la instrucció que retorna un nombre negatiu (-1) i mostra 'El buffer no està completament omplert ni escrit'.