Lenguaje C: detalles de uso de sprintf ()

1. Introducción a sprintf ()

1. Prototipo de función

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

2. Parámetros

  • cadena : es un puntero a una matriz de caracteres que almacena cadenas C.
  • format -format string, la estructura es la misma que la función printf: % [flags] [width] [.prec] [length] type .
  • [argumento]… -Tabla de parámetros , según diferentes cadenas de formato, existen diferentes tablas de parámetros.

3. Función

Escribe datos formateados en un búfer de cadena.

4. Archivos de encabezado

#include <stdio.h>

5. Valor devuelto

Si tiene éxito, devuelve el número total de caracteres escritos, excluyendo el carácter nulo agregado al final de la cadena. Si falla, devuelve un número negativo.
sprintf devuelve el número de bytes escritos en una cadena en el resultado del argumento de formato como contenido, y el carácter final '\ 0' no se cuenta. Es decir, si "Hola" está escrito en una cadena con suficiente espacio, la función sprintf devuelve 5.

Dos, uso de sprintf ()

La función de la función sprintf es básicamente la misma que la de la función printf, excepto que envía el resultado a la cadena especificada.

1. Imprime un número entero en una cadena

El código específico es el siguiente:

#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;
}

Los resultados son los siguientes:

520
520     5231
0x00146f 0X00146F

2. Controle el formato de impresión de números de punto flotante

El código específico es el siguiente:

#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;
}

Los resultados son los siguientes:

3.141593
   3.142
3.142

3. Cadena de conexión

Dado que puede insertar varias cosas en la cadena de control de formato de sprintf () y finalmente "conectarlas en una cadena", naturalmente puede conectar cadenas. sprintf () puede concatenar múltiples cadenas a la vez (naturalmente, también puede insertar otro contenido entre ellas al mismo tiempo, en resumen, es muy flexible).
El código específico es el siguiente:

#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;
}

Los resultados son los siguientes:

I love 100.

4. Imprimir la información de la dirección

El código específico es el siguiente:

#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;
}

Los resultados son los siguientes:

6356556
0060FE4C
0060FE4C

5. Usa el valor de retorno de sprintf

sprintf () devuelve el número de caracteres finalmente impresos en el búfer de caracteres en esta llamada de función. Es decir, después de que finaliza cada llamada a sprinf, no es necesario volver a llamar a strlen para conocer la longitud de la cadena de resultado.
El código específico es el siguiente:

#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;
}

Los resultados son los siguientes:

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

3. Problemas comunes con el uso de sprintf ()

sprintf () es una función variable, a menudo tiene problemas cuando se usa, y siempre que haya un problema, generalmente es un error de acceso a la memoria que puede hacer que el programa se bloquee. Afortunadamente, el problema causado por el mal uso de sprintf es grave, pero es fácil de averiguar. Así que varias situaciones.

  • Desbordamiento del búfer: la longitud asignada del primer parámetro es demasiado corta. Intente aumentarla. Al imprimir una cadena, intente especificar el número máximo de caracteres en forma de "% .ns".
  • Olvídese del primer parámetro: el problema de nivel demasiado bajo no puede ser de nivel bajo, utilizando printf demasiado acostumbrado.
  • El parámetro variable corresponde a un problema: normalmente se olvida proporcionar el parámetro variable correspondiente a un determinado símbolo de formato, lo que provoca que todos los parámetros posteriores se pierdan.

Supongo que te gusta

Origin blog.csdn.net/MQ0522/article/details/111028283
Recomendado
Clasificación