国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C > 正文

snprintf函數(shù)的用法解析

2020-01-26 15:57:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);
函數(shù)說(shuō)明:最多從源串中拷貝n-1個(gè)字符到目標(biāo)串中,然后再在后面加一個(gè)0。所以如果目標(biāo)串的大小為n 的話,將不會(huì)溢出。
函數(shù)返回值:若成功則返回欲寫入的字符串長(zhǎng)度,若出錯(cuò)則返回負(fù)值。

Result1(推薦的用法)

復(fù)制代碼 代碼如下:

#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:(不推薦使用)
復(fù)制代碼 代碼如下:

#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函數(shù)返回值的測(cè)試:
復(fù)制代碼 代碼如下:

#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:
復(fù)制代碼 代碼如下:

#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

補(bǔ)充一下,snprintf的返回值是欲寫入的字符串長(zhǎng)度,而不是實(shí)際寫入的字符串度。如:
char test[8];
int ret = snprintf(test,5,"1234567890");
printf("%d|%s/n",ret,test);

運(yùn)行結(jié)果為:
10|1234

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 永济市| 夏津县| 晋中市| 麻城市| 尉氏县| 凤台县| 桑日县| 通州市| 开江县| 和政县| 竹山县| 仁寿县| 潢川县| 洮南市| 武乡县| 巨鹿县| 拜城县| 湖南省| 万荣县| 清镇市| 康保县| 平江县| 青海省| 蚌埠市| 江口县| 汉阴县| 蓬安县| 皋兰县| 古交市| 丽江市| 宜昌市| 冕宁县| 余干县| 双城市| 津南区| 海口市| 承德县| 阿巴嘎旗| 贵定县| 堆龙德庆县| 海淀区|