为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我打印出来的是abc 而不是ab _snprintf返回值rt为什么是-1呢?

为什么我打印出来的是abc 而不是ab _snprintf返回值rt为什么是-1呢?

慕尼黑的夜晚无繁华 2023-03-12 21:17:06
#include <stdio.h>#include <string.h>main(){char str[5];memset(str,0,sizeof(str));int rt=_snprintf(str,3,"%s","abcdefg");printf("%d\n",rt);printf("%s",str);}snprintf函数书上是说截取n-1个字符,也就是3-1个字符。 
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

_snprintf(str,3,"%s","abcdefg"); 存放3个字符。(存放n个字符,下标到 n-1)。打印出来的是abc 。
返回值rt为什么是-1呢,因为丢弃了一些字符(-1 表示发生了“错误”)。

如果 char str[100]; int rt = _snprintf(str,100,"%s","abcdefg");
则返回数就是7 (成功写入str的字符个数)。

查看完整回答
反对 回复 2023-03-15
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

snprintf(),为函数原型int snprintf(char *str, size_t size, const char *format, ...)。
功能
将可变个参数(...)按照format格式化成字符串,然后将其复制到str中
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为欲写入的字符串长度。
char a[20];
i = snprintf(a, 9, "%012d", 12345);
printf("i = %d, a = %s", i, a);
输出为:i = 12, a = 000000012345

查看完整回答
反对 回复 2023-03-15
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信