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.