Langage C: détails d'utilisation de sprintf ()

1. Introduction à sprintf ()

1. Prototype de fonction

int sprintf(char *string, char *format [,argument,...]);

2. Paramètres

  • string - Il s'agit d'un pointeur vers un tableau de caractères qui stocke les chaînes C.
  • format -format chaîne, la structure est la même que la fonction printf: % [flags] [width] [.prec] [length] type .
  • [argument]… -Table de paramètres , selon différentes chaînes de format, il existe différentes tables de paramètres.

3. Fonction

Écrivez les données formatées dans un tampon de chaîne.

4. Fichiers d'en-tête

#include <stdio.h>

5. Valeur renvoyée

En cas de succès, il renvoie le nombre total de caractères écrits, à l'exclusion du caractère nul ajouté à la fin de la chaîne. S'il échoue, il renvoie un nombre négatif.
sprintf renvoie le nombre d'octets écrits dans la chaîne dans le résultat de l'argument de format comme contenu, et le caractère de fin '\ 0' n'est pas compté. Autrement dit, si "Hello" est écrit dans une chaîne avec suffisamment d 'espace, la fonction sprintf renvoie 5.

Deux, l'utilisation de sprintf ()

La fonction de la fonction sprintf est fondamentalement la même que celle de la fonction printf, sauf qu'elle renvoie le résultat dans la chaîne spécifiée.

1. Imprimer un entier dans une chaîne

Le code spécifique est le suivant:

#include <stdio.h>

int main(void)
{
    
    
	char sdata[200]={
    
    0};
	
	sprintf(sdata,"%d",520);
	printf("%s\n",sdata);
	
	sprintf(sdata, "%-6d%6d", 520,5231); 		//默认右对齐 
	printf("%s\n",sdata);
	
 	sprintf(sdata, "0x%06x 0X%06X", 520,5231);	//小写和大写16进制 
 	printf("%s\n",sdata);
 	
	return 0;
}

Les résultats sont les suivants:

520
520     5231
0x00146f 0X00146F

2. Contrôlez le format d'impression des nombres à virgule flottante

Le code spécifique est le suivant:

#include <stdio.h>

int main(void)
{
    
    
	char sdata[200]={
    
    0};
	
 	sprintf(sdata, "%f", 3.1415926); 			//%f默认保留小数点后6 位
 	printf("%s\n",sdata);
 	
 	sprintf(sdata, "%8.3f", 3.1415626);			//指定宽度,不足的左边补空格:
 	printf("%s\n",sdata);
 	
 	sprintf(sdata, "%.3f", 3.1415626);			//不指定总宽度
 	printf("%s\n",sdata);
 	
	return 0;
}

Les résultats sont les suivants:

3.141593
   3.142
3.142

3. Chaîne de connexion

Puisque vous pouvez insérer diverses choses dans la chaîne de contrôle de format de sprintf () et enfin "les connecter en une chaîne", vous pouvez naturellement connecter des chaînes. sprintf () peut concaténer plusieurs chaînes à la fois (naturellement, vous pouvez également insérer d'autres contenus entre elles en même temps, bref, c'est très flexible).
Le code spécifique est le suivant:

#include <stdio.h>

int main(void)
{
    
    
	char sdata[200]={
    
    0};
	char* who = "I";
	int m = 100;
	
	sprintf(sdata, "%s love %d 元.", who,m);//简单的字符串拼接 
	printf("%s\n",sdata);
 	
	return 0;
}

Les résultats sont les suivants:

I love 100.

4. Imprimer les informations d'adresse

Le code spécifique est le suivant:

#include <stdio.h>

int main(void)
{
    
    
	char sdata[200]={
    
    0};
	int n=0;
	
	sprintf(sdata,"%u",&n);//十进制地址 
	printf("%s\n",sdata);
	
	sprintf(sdata,"%08X",&n);//十六进制地址 
	printf("%s\n",sdata);	
 
 	sprintf(sdata,"%p",&n);	// 专用打印地址 
	printf("%s\n",sdata);	
	return 0;
}

Les résultats sont les suivants:

6356556
0060FE4C
0060FE4C

5. Utilisez la valeur de retour de sprintf

sprintf () renvoie le nombre de caractères finalement imprimés dans le tampon de caractères lors de cet appel de fonction. Autrement dit, après la fin de chaque appel sprinf, vous n'avez pas besoin d'appeler à nouveau strlen pour connaître la longueur de la chaîne résultante.
Le code spécifique est le suivant:

#include <stdio.h>

int main(void)
{
    
    
	char sdata[200]={
    
    0};
	int len=0;
	
	len=sprintf(sdata,"%s!","I love you");
	printf("len=%d\ndata=%s\n",len,sdata);
	
	len+=sprintf(sdata+len,"%d",1314);
	printf("len=%d\ndata=%s\n",len,sdata);
	
	len+=sprintf(sdata+len,"--%p。",&len);
	printf("len=%d\ndata=%s\n",len,sdata);
	return 0;
}

Les résultats sont les suivants:

len=11
data=I love you!
len=15
data=I love you!1314
len=27
data=I love you!1314--0060FE4C。

3. Problèmes courants liés à l'utilisation de sprintf ()

sprintf () est une fonction variadique, elle a souvent des problèmes lorsqu'elle est utilisée, et tant qu'il y a un problème, c'est généralement une erreur d'accès à la mémoire qui peut provoquer le plantage du programme. Heureusement, le problème causé par l'utilisation abusive de sprintf est grave, mais facile à découvrir, donc plusieurs situations.

  • Buffer overflow: la longueur attribuée au premier paramètre est trop courte. Essayez de l'agrandir. Lors de l'impression d'une chaîne, essayez de spécifier le nombre maximal de caractères sous la forme "% .ns".
  • Oubliez le premier paramètre: un problème de niveau trop bas ne peut pas être de bas niveau, en utilisant printf trop utilisé.
  • Le paramètre variable correspond à un problème: on oublie généralement de fournir le paramètre variable correspondant à un certain symbole de format, ce qui fait que tous les paramètres suivants sont égarés.

Je suppose que tu aimes

Origine blog.csdn.net/MQ0522/article/details/111028283
conseillé
Classement