zoukankan      html  css  js  c++  java
  • snprintf函数用法

    snprintf函数用法 - crfoxzl的专栏 - 博客频道 - CSDN.NET

    snprintf函数用法

    分类: UNIX NETWORK PROGRAMMING 9063人阅读 评论(1) 收藏 举报

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

    函数说明:最多从源串中拷贝n1个字符到目标串中,然后再在后面加一个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;
    }

     

    root] /root/lindatest
    $ ./test
    str=012345678

     

     

    Result2:(不推荐使用)

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

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

     

    root] /root/lindatest
    $ ./test
    str=01234567890123456

     

     

    snprintf函数返回值的测试:

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

    int main()
    {
        char str1[10] ={0, };
        char str2[10] ={0, };
        int ret1=0,ret2=0;
        ret1=snprintf(str1, sizeof(str1), "%s", "abc");
        ret2=snprintf(str2, 4, "%s", "aaabbbccc");
        printf("aaabbbccc length=%d/n", strlen("aaabbbccc"));
        printf("str1=%s,ret1=%d/n", str1, ret1);
        printf("str2=%s,ret2=%d/n", str2, ret2);
        return 0;
    }

    [root] /root/lindatest
    $ ./test
    aaabbbccc length=9
    str1=abc,ret1=3
    str2=aaa,ret2=9

     

    解释SIZE:

     #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    char dst1[10] ={0, },dst2[10] ={0, };
    char src1[10] ="aaa",src2[15] ="aaabbbcccddd";
    int size=sizeof(dst1);
    int ret1=0, ret2=0;
    ret1=snprintf(dst1, size, "str :%s", src1);
    ret2=snprintf(dst2, size, "str :%s", src2);
    printf("sizeof(dst1)=%d, src1=%s, /"str :%%s/"=%s%s, dst1=%s, ret1=%d/n", sizeof(dst1), src1, "str :", src1, dst1, ret1);
    printf("sizeof(dst2)=%d, src2=%s, /"str :%%s/"=%s%s, dst2=%s, ret2=%d/n", sizeof(dst2), src2, "str :", src2, dst2, ret2);
    return 0;
    }
    root] /root/lindatest
    $ ./test
    sizeof(dst1)=10, src1=aaa, "str :%s"=str :aaa, dst1=str :aaa, ret1=8
    sizeof(dst2)=10, src2=aaabbbcccddd, "str :%s"=str :aaabbbcccddd, dst2=str :aaab, ret2=17

    补充一下,snprintf的返回值是欲写入的字符串长度,而不是实际写入的字符串度。如:
    char test[8];
    int ret = snprintf(test,5,"1234567890");
    printf("%d|%s/n",ret,test);

    运行结果为:
    10|1234

  • 相关阅读:
    linux内核中GNU C和标准C的区别
    linux内核中GNU C和标准C的区别
    Getting start with dbus in systemd (02)
    Getting start with dbus in systemd (01)
    Getting start with dbus in systemd (03)
    物理内存相关的三个数据结构
    数据类型对应字节数(32位,64位 int 占字节数)
    Linux kernel 内存
    共模电感的原理以及使用情况
    [原创]DC-DC输出端加电压会烧毁
  • 原文地址:https://www.cnblogs.com/lexus/p/2858965.html
Copyright © 2011-2022 走看看