sprintf和snprintf函数用法简介
来源:互联网 发布:做淘宝买什么电脑好 编辑:程序博客网 时间:2024/06/14 02:28
函数原型
int sprintf(char *buffer, const char *format, [ argument] … );
参数列表
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen)
函数功能:
把格式化的数据写入某个字符串缓冲区。
常见用法:
int main( void){ char buffer[200], s[] = "computer",c = 'l'; int i = 35, j; floatfp = 1.7320534f; //Format and print various data: j = sprintf( buffer, " String: %s\n", s );// C4996 j += sprintf( buffer + j, " Character:%c\n", c ); // C4996 j += sprintf( buffer + j, " Integer: %d\n", i );// C4996 j += sprintf( buffer + j, " Real: %f\n", fp );// C4996 //Note: sprintf is deprecated; consider using sprintf_s instead printf( "Output:\n%s\ncharactercount = %d\n", buffer, j );}
sprintf函数是一个变参函数,前两个函数有固定类型,会进行安全检查,后面的参数都不是类型安全的。使用的时要小心。还有一点就是sprintf() 的写操作可能会越过buffer的边界,从而产生一个缓冲区溢出。
要修正这一缺陷,可以使用函数snprintf()代替函数sprintf()。
函数原型
int snprintf(char *str, size_t size, const char *format, ...);
参数列表
str:char型指针,指向将要写入的字符串的缓冲区。
size:要写入str缓冲区的长度。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen)
函数功能:
最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。
常见用法:
int main(){ charstr[10] = {'0'}; snprintf(str, sizeof(str), "%s",123); printf("%s\n",str);}
但snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。所以在需要使用snprintf()时改成_snprintf就可以了,或则在预编译处加入:
#if _MSC_VER
#define snprintf _snprintf
#endif
上面这个例子有个错误:这是我在写的过程中的误理解,函数基本功能把格式化的数据存储在字符串中,但是我以为是字符串,所以在转化的时候都以“%s”,这里错了,是什么类型就以什么类型转换,比如float类型,就以“%f”转换。所以改为snprintf(str,sizeof(str), "%d",123);就正确了。
- sprintf和snprintf函数用法简介
- sprintf和snprintf用法
- snprintf函数和sprintf函数
- sscanf / sprintf 函数和 snprintf 函数的用法
- snprintf函数用法及与sprintf比较
- printf、fprintf、sprintf和snprintf函数
- sprintf()的snprintf()用法
- sprintf()的snprintf()用法
- sprintf,snprintf的用法
- sprintf和snprintf测试
- snprintf和sprintf
- snprintf()和sprintf()学习
- sprintf和snprintf例子
- snprintf()和sprintf()学习
- 关于sprintf(snprintf)和sscanf的用法
- C++ 中的sprintf和snprintf 函数的区别
- snprintf()和sprintf()格式化字符串
- snprintf和sprintf区别分析
- 【二叉树中序遍历】Binary Tree Inorder Traversal
- Paste Deployment简介以及cinder-api-paste.ini的解析(2)
- 路由器重围特权密码
- eclipse常用快捷键
- AJAX
- sprintf和snprintf函数用法简介
- Observer与Observable
- eclipse实用配置
- Hidden Markov Models Forward Backward算法
- hdu 4764 Stone(博弈)
- 【Unix 网络编程】TCP Socket 编程基础(0)
- java设计模式(创建型)之单例模式
- 2014名校复试机考模拟题 21376:朋友圈
- MyEclipse项目下包层次结构问题