printf函数大家都熟悉,但是printf一般打印到标准输出,在需要整理、格式化字符串时,sprintf就大显身手了。

例如,在处理传感器数据时,为了将得到的数据整合成特定的格式通过网络发送出去,

char buffer[100] = { 0 };
sprintf(buffer, "temperature: %f; humidity:%f\r\n", tempData, humiData);
send(clientSocket, buffer, strlen(buffer));

又例如,在进行HTTP协议包封装时,

char dataBuf[1024] = { 0 };sprintf(dataBuf, "HTTP/1.1 200 SUCCESS\r\n");
send(clientSocket, dataBuf, strlen(dataBuf), 0);sprintf(dataBuf, "Content-type:text/html\r\n");
send(clientSocket, dataBuf, strlen(dataBuf), 0);sprintf(dataBuf, "\r\n");
send(clientSocket, dataBuf, strlen(dataBuf), 0);do
{fgets(dataBuf, 1024, fs);send(clientSocket, dataBuf, strlen(dataBuf), 0);
} while (!feof(fs));fclose(fs);

sprintf语法:

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

  • string:指向字符数组的指针,该数组存储了C字符串。
  • format:格式化的字符串
  • argument:根据语法格式替换format中%标签

语法是相当简单的,但是有个需要注意的点,sprintf是将format指向的字符串从string[0]的位置依次放入(覆盖),当format指向的字符串长度比string字符数组小时,string数组中未被覆盖的值将保持,看下面的例子,

char sendBuf[1024] = { 0 };sprintf(sendBuf, "HTTP/1.1 404 NOT FOUND\r\n");
send(clientSocket, sendBuf, strlen(sendBuf), 0);
printf("The sent string1 is:%s\r\n", sendBuf);sprintf(sendBuf, "Content-type:text/html\r\n");
send(clientSocket, sendBuf, strlen(sendBuf), 0);
printf("The sent string2 is:%s\r\n", sendBuf);sprintf(sendBuf, "\r\n");
send(clientSocket, sendBuf, strlen(sendBuf), 0);
printf("The sent string3 is:%s\r\n", sendBuf);printf("The other char 0 is:%c\r\n", sendBuf[0]);
printf("The other char 1 is:%c\r\n", sendBuf[1]);
printf("The other char 2 is:%c\r\n", sendBuf[2]);
printf("The other char 3 is:%c\r\n", sendBuf[3]);
printf("The other char 4 is:%c\r\n", sendBuf[4]);
printf("The other char 5 is:%c\r\n", sendBuf[5]);
printf("The other char 6 is:%c\r\n", sendBuf[6]);

输出如下:

如上代码,最后一次使用sprintf将sendBuf字符串数组格式化为"\r\n",这时逐项打印sendBuf,

sendBuf[0]的值为\r,所以看不到该项打印

sendBuf[1]的值为\n,所以看不到该项打印,但是产生了换行动作

sendBuf[2]的值为"",就是字符串最后的"\0",所以看不到打印

sendBuf[3]的值为t,这是上一次格式化遗留的字符

sendBuf[4]的值为e,这是上一次格式化遗留的字符

sendBuf[5]的值为n,这是上一次格式化遗留的字符

sendBuf[6]的值为t,这是上一次格式化遗留的字符

在如上代码的上下文中,sendBuf中遗留的上次格式化的字符不会对程序运行产生任何影响,因为使用send发送字符串时,指定了发送长度为strlen(sendBuf),因此sendBuf字符数组中被发送的只是刚拷贝来的新数据。但是如果将strlen更换为sizeof,程序功能便会出现异常。

在使用sprintf前,有时需要保证目标字符串数组“干净”,可以使用memset实现。

memset(sendBuf, 0, sizeof(char) * 1024)

sprintf 函数详解相关推荐

  1. C语言的sprintf()函数详解。

    目录 1. 用于格式化字符串 2. 字符串的拼接 3. 数字转换成字符串 头文件:#include <stdio.h> sprintf()函数用于将格式化的数据写入字符串. int spr ...

  2. 关于sprintf函数详解

    ------------------------------------------------------------------------------------ 声明:此文章为本人原创,未经本 ...

  3. sprintf函数详解

    sprintf 将字串格式化. 头文件 #include<stdio.h> 语法: int sprintf(string format, mixed [args]...); 返回值:字符串 ...

  4. php 打印对象详细信息,php打印显示数组与对象的函数详解

    php打印显示数组与对象的函数详解 发布于 2014-11-17 18:55:49 | 699 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext P ...

  5. PHP加密函数与解密函数详解

    本篇文章主要为大家详细介绍了PHP中的加密函数与解密函数 Php常用的加密函数有 MD5加密(不可逆).Crypt加密(不可逆).Sha1加密(不可逆).Urlencode加密(可逆) base64编 ...

  6. Linux 文件锁 fcntl 函数详解

    Linux 文件锁 fcntl 函数详解 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); ...

  7. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  8. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  9. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

最新文章

  1. 团队-爬虫豆瓣top250项目-项目进度
  2. boost::units模块实现三角函数相关的测试程序
  3. mysql增删改查 dao_MYSQL 之 JDBC(七):增删改查(五) DAO设计模式
  4. 服务提供者与服务消费者
  5. linux如何运行synaptic,Linux_Ubuntu 7.04 Synaptic软件包管理器功能,Ubuntu的新立得软件包管理器(Syn - phpStudy...
  6. jmeter报“msg“:“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“的解决方法
  7. 计算机word怎么写,电脑word怎么用?
  8. Think:研究生期间的迷茫、困惑——放平心态,奋力拼搏
  9. python visual studio jetbrain_jetbrain系列IDE设置
  10. 友盟分享 微博 c8998文件不存在
  11. NAACL 2021 上的图神经网络好文
  12. CC2530(SPI)驱动FLASH芯片W25Qxx
  13. Revit开发之载入族的创建小技巧
  14. C++从文件中读取数据,打印(追加打印)至文件
  15. 博士复试复旦计算机,我考上复旦大学博士之路 复旦考博复试通过记
  16. “揭开意识的奥秘:认知相对论”及作者李玉鑑简介 (公号发“李玉鑑AI”下载PDF资料,欢迎转发、赞赏支持科普)
  17. psp 6.61降级到_将电视挤到您的PSP上
  18. python以环状形式组合排列图片并输出的方法
  19. 神经网络模型提升算法性能的方法
  20. JVM原理和优化GC清理

热门文章

  1. SpringBoot--配置Druid(德鲁伊)数据源监控
  2. [SSM][5][映射器]
  3. html语言中注释标记,html注释代码<!--......--> 标签的用法详解
  4. 浅谈LD_PRELOAD劫持
  5. 游戏测评1-《终焉誓约》
  6. 初学软件工程——(一、二章)
  7. 基于SSM开发宠物在线医疗系统
  8. 如何改变关系热图的色阶(plotly)
  9. C语言的正则表达式--入门
  10. 微信公众号、普通网页关闭当前页面