sprintf 函数详解
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 函数详解相关推荐
- C语言的sprintf()函数详解。
目录 1. 用于格式化字符串 2. 字符串的拼接 3. 数字转换成字符串 头文件:#include <stdio.h> sprintf()函数用于将格式化的数据写入字符串. int spr ...
- 关于sprintf函数详解
------------------------------------------------------------------------------------ 声明:此文章为本人原创,未经本 ...
- sprintf函数详解
sprintf 将字串格式化. 头文件 #include<stdio.h> 语法: int sprintf(string format, mixed [args]...); 返回值:字符串 ...
- php 打印对象详细信息,php打印显示数组与对象的函数详解
php打印显示数组与对象的函数详解 发布于 2014-11-17 18:55:49 | 699 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext P ...
- PHP加密函数与解密函数详解
本篇文章主要为大家详细介绍了PHP中的加密函数与解密函数 Php常用的加密函数有 MD5加密(不可逆).Crypt加密(不可逆).Sha1加密(不可逆).Urlencode加密(可逆) base64编 ...
- Linux 文件锁 fcntl 函数详解
Linux 文件锁 fcntl 函数详解 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); ...
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【FFmpeg】函数详解(三)
FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...
- 【FFmpeg】函数详解(二)
FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...
最新文章
- 团队-爬虫豆瓣top250项目-项目进度
- boost::units模块实现三角函数相关的测试程序
- mysql增删改查 dao_MYSQL 之 JDBC(七):增删改查(五) DAO设计模式
- 服务提供者与服务消费者
- linux如何运行synaptic,Linux_Ubuntu 7.04 Synaptic软件包管理器功能,Ubuntu的新立得软件包管理器(Syn - phpStudy...
- jmeter报“msg“:“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“的解决方法
- 计算机word怎么写,电脑word怎么用?
- Think:研究生期间的迷茫、困惑——放平心态,奋力拼搏
- python visual studio jetbrain_jetbrain系列IDE设置
- 友盟分享 微博 c8998文件不存在
- NAACL 2021 上的图神经网络好文
- CC2530(SPI)驱动FLASH芯片W25Qxx
- Revit开发之载入族的创建小技巧
- C++从文件中读取数据,打印(追加打印)至文件
- 博士复试复旦计算机,我考上复旦大学博士之路 复旦考博复试通过记
- “揭开意识的奥秘:认知相对论”及作者李玉鑑简介 (公号发“李玉鑑AI”下载PDF资料,欢迎转发、赞赏支持科普)
- psp 6.61降级到_将电视挤到您的PSP上
- python以环状形式组合排列图片并输出的方法
- 神经网络模型提升算法性能的方法
- JVM原理和优化GC清理
热门文章
- SpringBoot--配置Druid(德鲁伊)数据源监控
- [SSM][5][映射器]
- html语言中注释标记,html注释代码<!--......--> 标签的用法详解
- 浅谈LD_PRELOAD劫持
- 游戏测评1-《终焉誓约》
- 初学软件工程——(一、二章)
- 基于SSM开发宠物在线医疗系统
- 如何改变关系热图的色阶(plotly)
- C语言的正则表达式--入门
- 微信公众号、普通网页关闭当前页面