使用sprintf需要注意的地方

简介: sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。

sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。

sprintf_s()sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险 。这个安全版本的原型是:

int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ... );

缓冲区溢出

第一个参数的长度太短了,建议变参对应一定要细心,而打印字符串时,尽量使用%.ns”的形式指定最大字符数。

strftime

sprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:

time_t t = time(0);

//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。

char s[32];

strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));

原文:

http://baike.baidu.com/view/1295144.htm

目录
相关文章
|
2月前
|
SQL 安全 PHP
|
4月前
fgets函数(配合问题详解)
fgets函数(配合问题详解)
|
3月前
|
数据格式
sprintf函数
sprintf函数
18 0
|
5月前
|
C++
关于在vs中一劳永逸解决使用scanf, strcpy等函数的方法
关于在vs中一劳永逸解决使用scanf, strcpy等函数的方法
|
6月前
|
存储 Linux C语言
深入解析Linux环境下的sprintf()和printf()函数
在C语言中,`sprintf()`和`printf()`函数是用于格式化输出的两个重要函数。`sprintf()`函数将格式化的数据写入一个字符串,而`printf()`函数则将格式化的数据输出到标准输出。在Linux环境中,这两个函数被广泛应用于各种编程任务。本文将详细介绍这两个函数的用法,包括格式化字符串的语法和一些常见的使用场景。
254 1
|
9月前
|
C语言
C语言 --- sprintf用法
C语言 --- sprintf用法
70 0
|
10月前
sprintf用法
sprintf用法
107 0
浅谈sscanf陷阱
sscanf虽然是个不错的函数,它可以很简单的将字符串转成特定的格式,比如转成整数、浮点数等等。但是如果使用不慎,会带来很大的麻烦。