printf、sprintf以及wsprintf的理解

文章目录

  • 前言:
  • printf()函数
  • sprintf()函数
  • wsprintf()函数

前言:

??最近在自学C语言,在阅读一个程序代码时,遇到了sprintf()和wsprintf()两个函数,于是将其拿出来和printf()来做对比,依次加深自己的理解,同时让困惑的伙伴能够以此为翘板,掌握其用法。如有错误的地方,万望各位大神不吝赐教,不胜感激。

printf()函数

??头文件:#include
??功能:格式化输出函数,向终端(输出设备)输出若干任意类型的数据。
??一般格式:
??①printf(格式控制,输出列表);
??②printf(char *字符串);//直接输出字符串
??③printf(char *格式化字符串,参数行);
?参数:
??①格式控制:用双引号括起来的字符串,也称为转换控制字符串。
??包括格式字符和普通字符两种:格式字符是用来进行格式说明的,其作用是将输出的数据转换为指定的格式输出。格式字符是以“%”字符开头的。普通字符是要原样输出的字符,其中包括双括号内的逗号、空格和换行符。
??②直接向输出设备显示字符串内容。
??③格式化字符串中含有以%字符开头的格式化字符,并对应参数行的数据,再将数据按序输出。

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main()
{
    int a = 1;
    char b[] = "I love C!";
    printf("%d\n",a);
    printf("I love C!\n");
    printf("%s\n",b);
    system("pause");
    return 0;
}

?输出结果:
在这里插入图片描述

sprintf()函数

??头文件:#include
??函数功能:格式化字符串,把格式化的数据写入某个字符串。
??函数原型:int sprintf(char *buffer,const char *format, [argument,…]);
??参数简介:
??①buffer:是char类型的指针,指向写入的字符串指针(个人测试,发现buffer只能定义成字符串数组时才可以使用,如果定义为指针使用会出错);
??②format:格式化字符串,即在程序中想要的格式;
??③argument:可选参数,可以为任一类型的数据,个数可多个;
??返回值:buffer指向的字符串长度(strlen)
?个人理解:
??该函数的作用是将【argument】参数列表中指代的内容以format(和printf函数中的格式控制参数是相似的)形式存入指针buffer中。
当将buffer定义为字符型指针时:

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main()
{
    char *ch1="I";
    char *ch2 = "China";
    char buffer[20];
//注意:ch1和ch2以及中间添加的字符(例如下面的LOVE)总长度不要超出buffer数组的下标
    sprintf(buffer, "%s Love %s", ch1, ch2);
    printf("%s\n", buffer);
    system("pause");
    return 0;
}

显示效果
在这里插入图片描述
在这里只拿字符串类型讲了一下例子,其他的可以动手试试。

wsprintf()函数

??头文件:#include
??出现原因:wsprintf用法在C语言中格式化字符串可以使用printf,但是在WINDOWS编程设计中却行不通了,但是却有变通的方法,那就是wsprintf这个函数。
??函数功能:将一系列的字符和数值输入到缓冲区。输出缓冲区里的值取决于格式说明符(即”%”)。如果写入的是文字,此函数给写入的文字的末尾追加一个”\0”。
??函数原型:
??int wsprintf(LPTSTR lpOut,LPCTSTR lpFmt, … );
??参数简介:
?①LPTSTR lpOut:输出缓冲区,最大为1024字节
?②LPCTSTR lpFmt:格式字符串
?③…:需输出的参数
?注:如果缓冲区与写进缓冲区的数据类型一样,可以不使用字符串。该函数you1024字符限制,而且不支持浮点数。该函数的作用不是向输出设备输出,而是输入到缓冲区
??返回值:写入的长度,但不包含最后的”\0”。
具体操作可以根据上面的代码进行练习。