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 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿