zoukankan      html  css  js  c++  java
  • printf、fprintf、sprintf和snprintf 区别

    都是把格式好的字符串输出,只是输出的目标不一样:
    1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。
    2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。
    3 fprintf, 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针FILE*。

    fprintf传送格式化输出到一个文件中。根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件,fprintf只能和printf一样工作。若成功则返回值是输出的字符数,发生错误时返回一个负值。第一个参数是文件指针stream,后面的参数就是printf中的参数,其功能就是把这些输出送到文件指针指定的文件中,如果想要像printf一样将输出送到标准输出,只需要将文件指针FILE指定为stdout即可。
    示例程序如下:
    [cpp] view plain copy
     
     print?
    1. #include   
    2.   
    3. FILE *stream;  
    4. int  
    5. main(void)  
    6. {  
    7.     char s[] = "this is a string. ";  
    8.     char c = ' ';  
    9.   
    10.     stream = fopen("fprintf.out", "w");  
    11.     fprintf(stream, "%s", s);  
    12.     fprintf(stdout, "abc ");  
    13.     return 0;  
    14. }  
    该程序的运行结果是在fprintf.out文件中存入了this is a string.字符串,在标准输出输出了abc字符串。



    sprintf,字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。第一个参数str是char型指针,指向将要写入的字符串的缓冲区。后面第二个参数是格式化字符串。
    示例程序:
    [cpp] view plain copy
     
     print?
    1. #include   
    2.   
    3. int  
    4. main(void)  
    5. {  
    6.     char s[100];   
    7.   
    8.     sprintf(s, "%%sfjdksfj" );  
    9.     printf("%s ", s);  
    10.     return 0;  
    11. }  
    执行后输出结果是
    [cpp] view plain copy
     
     print?
    1. %sfjdksfj  



    snprintf函数与sprintf函数类似。它也是将可变个参数按照format格式化成字符串,然后将其复制到str中。
    (1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('');(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(''),返回值为格式化后的字符串的长度。
    示例程序:
    [cpp] view plain copy
     
     print?
    1. #include   
    2.   
    3. int  
    4. main(void)  
    5. {  
    6.     char s[10];   
    7.   
    8.     snprintf(s, 4, "%%sfjdksfj" );  
    9.     printf("%s ", s);  
    10.     snprintf(s, sizeof(s), "%%sfjdksfj" );  
    11.     printf("%s ", s);  
    12.     return 0;  
    13. }  
    运行结果:

    %sf
    %sfjdksfj


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

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

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

    Result1(推荐的用法)

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
         char str[10]={0,};
         snprintf(str, sizeof(str), "0123456789012345678");
         printf("str=%s/n", str);
         return 0;
    }

  • 相关阅读:
    寒武纪芯片——有自己的SDK,支持tf、caffe、MXNet
    专车降价滴滴快车使命终结?
    滴滴代驾骑虎难下 司机1人23部手机刷单
    柳青:再见!滴滴打车 其实这里面都是故事
    “专车”监管意见最快本月公布
    不少专车司机考虑退出
    专车新规或下周发布,估计有大量司机流失
    英媒:滴滴和优步每年烧钱64亿
    约租车管理办法近期公布 数量或受地方政府管控
    Uber上海公司被司机打上门
  • 原文地址:https://www.cnblogs.com/klb561/p/10391464.html
Copyright © 2011-2022 走看看