C 高手 帮个忙

来源:百度知道 编辑:UC知道 时间:2024/06/21 20:11:23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[10] ={0, };
char str2[10] ={0, };
int ret1=0,ret2=0;
ret1=_snprintf(str1, sizeof(str1), "%s", "abc112233456789");
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;
}
这段代码输出:
aaabbbccc length=9
str1=abc1122334烫烫烫?PpT?, ret1=-1
str2=aaab,ret2=-1
*******我不明白 为什么 set1=-1 是怎么回事 请帮忙解释一下 谢了
为什么 set1与set2会是 -1呢?

snprintf() int snprintf(char *str, size_t size, const char *format, ...);
将可变个参数(...)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 => size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0')
函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

你写的都属于第二种 :
如果格式化后的字符串长度 => size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0')

嗯……我也很好奇……返回负值说明没有成功才对……

如果符合前面条件 ret1=1