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

该回答引用ChatGPT

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


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


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


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