设为首页 加入收藏

TOP

C语言sscanf和sprintf输入输出使用及Strlen、Memset解释(二)
2014-11-23 20:00:08 】 浏览:3362
Tags:语言 sscanf sprintf 输入 输出 使用 Strlen Memset 解释
; // szfilename=1.0.0.1001 %40c 读取40个字符
%[^=] 读取字符串直到碰到’=’号,’^’后面可以带更多字符,如: char s[]="notepad=1.0.0.1001" ; char szfilename [32] = "" ; int i = sscanf( s, "%[^=]", szfilename ) ; // szfilename=notepad 如果参数格式是:%[^=:] ,那么也可以从 notepad:1.0.0.1001读取notepad 使用例子: char s[]="notepad=1.0.0.1001" ; char szname [32] = "" ; char szver [32] = “” ; sscanf( s, "%[^=]=%s", szname , szver ) ; // szname=notepad, szver=1.0.0.1001 总结:%[]有很大的功能,但是并不是很常用到,主要因为: 1、许多系统的 scanf 函数都有 漏洞. (典型的就是 TC 在输入浮点型时有时会出错). 2、用法复杂, 容易出错. 3、编译器作语法分析时会很困难, 从而影响目标代码的质量和执行效率. 个人觉得第3点最致命,越复杂的功能往往执行效率越低下。而一些简单的字符串分析我们可以自已处理。


Sprintf()字符串格式化命令


主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数

Sprintf

函数声明:int sprintf(char *buffer, const char *format [, argument1, argument2, …])

用途:将一段数据写入以地址buffer开始的字符串缓冲区

所属库文件:

参数:(1)buffer,将要写入数据的起始地址;(2)format,写入数据的格式;(3)argument:要写的数据,可以是任何格式的。

返回值:实际写入的字符串长度

说明:此函数需要注意缓冲区buffer溢出,要为写入的argument留足长度,可以用来代替itoa,即把整数转化为字符串。

Snprintf

函数声明:int snprintf(char *str, size_t size, const char *format, …)

用途:sprintf的安全模式,比sprintf多一个参数size。将一段数据写入以地址str开始的字符串缓冲区。字符串长度最大不超过长度size。如果超过或等于,则只写入size-1个,后面补个'\0'。

所属库文件:

参数:(1)str,将要写入数据的起始地址;(2)size,写入数据的最大长度(实际写入肯定小于等于此值,包括'\0');(3)format,写入数据的格式;(4)argument(省略号),要写的数据

例如:

\

运行后结果为

\

需要注意的是,snprintf返回值是format过后字符串的长度,并不是实际拷进字符串缓冲区的长度。


C语言常用函数strlen的使用方法

函数声明:extern unsigned int strlen(char *s);

所属函数库: < http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CrmmxNyjure1u9hzy/nWuLXE19a3+7SutcSzpLbIo6zG5NbQ19a3+7SusdjQ69LUoa9cMKGvveHOsjwvcD4KPHA+CrLOyv2junPOqtfWt/u0rrXEs/XKvLXY1rc8L3A+CjxwPgrKudPDvtnA/aO6PC9wPgo8cD4KtPrC68jnz8I8L3A+CjxwIGFsaWduPQ=="left"> \

编译运行结果

\

说明:

函数strlen比较容易理解,其功能和sizeof很容易混淆。其中sizeof指的是字符串声明后占用的内存长度,它就是一个操作符,不是函数;而strlen则是一个函数,它从第一个字节开始往后数,直到遇见了’\0’,则停止。

C语言常用函数memset的使用方法

函数声明:void *memset(void *s, int ch, size_t n);

用途:为一段内存的每一个字节都赋予ch所代表的值,该值采用ASCII编码。

所属函数库: 或者

参数:(1)s,开始内存的地址;(2)ch和n,从地址s开始,在之后的n字节长度内,把每一个字节的值都赋值为n。

使用举例:

代码如下

\

编译运行结果

说明:

该函数最常用的用途就是将一段新分配的内存初始化为0。例如我们代码的第9-10行。

需要注意的是,函数第二个参数的值代表的是即将设置的每个字节的值,因此对于第二个参数不是0的情况要格外小心。例如我们代码的第12-13行。intArray[0]本来是一个四字节的整数,它的每一个字节都将变成1。第12行运行完毕,intArray[0]的内容如下

(二进制)00000001 00000001 00000001 00000001 = (十进制)16843009

这也是为什么第13行输出的结果是16843009。





首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言可变参数在宏定义中的应用 下一篇栈的存储结构和常见操作(c 语言..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目