#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”。
为了解决这个问题,可以使用不同的缓冲区来存储不同的字符串,并在需要的时候进行拼接。