bcxiaolang008 2013-10-31 09:09 采纳率: 0%
浏览 986

C/C++ sprintf有问题 CSDN不让太短,我很短,但我会旋转

#include
#include
int main(){
char tmp[64];
memset(tmp,0,64);
sprintf(tmp,".%d",10);
printf("%s\n",tmp);

sprintf(tmp,".%d%s",11,tmp);
printf("%s\n",tmp);

sprintf(tmp,".%d%s",12,tmp);
printf("%s\n",tmp);

sprintf(tmp,"%d.%s",13,tmp);
printf("%s\n",tmp);
return 0;

}
.10
.11.11
.12.12.12
13.13.13.13.

怎么会这样子,数字改了,最后一个还多了个 "."

如果吧最后一个sprintf改成

sprintf(tmp,"%d%s",13,tmp);

更奇怪
出现13131313

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-08 00:49
    关注

    该回答引用ChatGPT

    问题出现在第三个sprintf语句中,因为在格式字符串中使用了同一个缓冲区的地址,导致结果出现意外的结果。


    具体地说,在第三个sprintf语句中,使用了“%s”格式符,它会读取缓冲区中的字符串并将其插入到结果中。由于该格式符之前的数字是12,因此缓冲区中已经有了一个“.12”,因此在使用“%s”时会重复插入“.12”,从而得到“.12.12.12”。


    在第四个sprintf语句中,问题类似。在格式字符串中使用了“%s”格式符,它会读取缓冲区中的字符串并将其插入到结果中。由于缓冲区中已经有了一个“13”,因此在使用“%s”时会重复插入“13”,从而得到“13131313”。


    为了解决这个问题,可以使用不同的缓冲区来存储不同的字符串,并在需要的时候进行拼接。

    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题