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

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/-colin/p/7559747.html
Copyright © 2011-2022 走看看