zoukankan      html  css  js  c++  java
  • 【转载】sprintf()函数 和 printf()函数

    sprintf()函数 和 printf()函数

    参考:C++ 中的sprintf和snprintf 函数的区别 - CSDN博客  http://blog.csdn.net/youbingchen/article/details/51980640


     

    sprintf()函数

    int sprintf(char *string,char *format,arg_list);

    函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用 outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函 数将所要输出的格式送到第一个参数,然后显示输出。

    snprintf()函数

    int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);

    函数说明:

    最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。

    函数返回值:

    若成功则返回欲写入的字符串长度,若出错则返回负值。

    snprintf函数是sprintf的限制字符数量的一个表达。

     sprintf函数返回的是实际输出到字符串缓冲中的字符个数,包括null结束符。

    snprintf函数返回的是应该输出到字符串缓冲的字符个数,所以snprintf的返回值可能大于给定的可用缓冲大小以及最终得到的字符串长度

    Example:

    #include <stdio.h>
    
    #include <stdlib.h>
    
    int main()
    
    {
    
         char str[10]={0,};
    
         snprintf(str, sizeof(str), "0123456789012345678");
    
         printf("str=%s/n", str);
    
         return 0;
    
    }

    总结

    sprintf可能导致缓冲区溢出问题而不被推荐使用,所以在项目中我一直优先选择使用snprintf函数,虽然会稍微麻烦那么一点点。这里就是sprintf和snprintf最主要的区别:snprintf通过提供缓冲区的可用大小传入参数来保证缓冲区的不溢出,如果超出缓冲区大小则进行截断。但是对于snprintf函数,还有一些细微的差别需要注意。

  • 相关阅读:
    C++指针与引用类型的区别
    Linux介绍和基本操作
    CMD 命令
    C语言关键字
    错误: 在类中找不到 main 方法, 请将 main 方法定义为: &#160; &#160;public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 。
    根据补码定义,由真值求补码。
    域名直接访问项目|Tomcat http 自动跳转Https
    Python扩展库NumPy快速入门
    项目慢查询性能分析
    Springboot 配置 https
  • 原文地址:https://www.cnblogs.com/hhxxgdd/p/8414667.html
Copyright © 2011-2022 走看看