zoukankan      html  css  js  c++  java
  • sprintf和snprintf函数

    printf()/sprintf()/snprintf()区别 
    先贴上其函数原型
    printf( const char *format, ...)    格式化输出字符串,默认输出到终端-----stdout
    sprintf(char *dest, const char *format,...)     格式化输出字符串到指定的缓冲区
    snprintf(char *dest, size_t size,const char *format,...)     按指定的SIZE格式化输出字符串到指定的缓冲区

    printf()函数在这就不再讨论,这里主要讨论sprintf()与snprintf()的用法及区别,

    1. #include "stdafx.h"  
    2. #include <stdio.h>  
    3. using namespace std;  
    4. int _tmain(int argc, _TCHAR* argv[])  
    5. {  
    6.     char *p1="China";  
    7.     char  a[20];  
    8.     sprintf(a,"%s",p1);  
    9.     printf("%s ",a);  
    10.     memset(a,0,sizeof(a));  
    11.     _snprintf(a,3,"%s",p1);  
    12.     printf("%s ",a);  
    13.     printf("%d ",strlen(a));  
    14.         return 0;  
    15. }  


    结果输出:
    China
    Chi
    3
    分析:
    sprintf(a,"%s",p1)  把p1字符串拷贝到数组a中(''也拷贝过去了)。
    snprintf(a,3,"%s",p1)  拷贝P1中前3个字符到数组a中,并在末尾自动添加''。
    sprintf属于I/O库函数,snprintf函数并不是标准c/c++中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。在gcc中,该函数名称就snprintf,而在VC中称为_snprintf。 如果你在VC中使用snprintf(),会提示此函数未声明,改成_snprintf()即可。

    注意点:
    1   sprintf是一个不安全函数,src串的长度应该小于dest缓冲区的大小,(如果src串的长度大于或等于dest缓冲区的大小,将会出现内存溢出。)
    2   snprintf中源串长度应该小于目标dest缓冲区的大小,且size等于目标dest缓冲区的大小。(如果源串长度大于或等于目标dest缓冲区的大小,且size等于目标dest缓冲区的大小,则只会拷贝目标dest缓冲区的大小减1个字符,后加'';该情况下,如果size大于目标dest缓冲区的大小则溢出。)
    3   snprintf ()函数返回值问题,   如果输出因为size的限制而被截断,返回值将是“如果有足够空间存储,所能输出的字符数(不包括字符串结尾的'')”,这个值和size相等或者比size大!也就是说,如果可以写入的字符串是"0123456789ABCDEF"共16位,但是size限制了是10,这样 snprintf() 的返回值将会是16 而不是10

    转载链接:http://blog.csdn.net/czxyhll/article/details/7950247

  • 相关阅读:
    Eclipse 3.6 中安装WindowBuilder Pro及使用SWT Designer
    BEC听力训练 方法
    在Eclipse安装Aptana插件
    failed to create JVM 解决办法
    BEC听力训练 方法2
    ATF/Installing
    Eclipse中如何配置SWT
    语音信号 :lms算法麦克风语音降噪
    图像信号 matlab滤波器设计1 :高通滤波器应用和设计
    matlab m文件
  • 原文地址:https://www.cnblogs.com/-colin/p/7559747.html
Copyright © 2011-2022 走看看