buffeV是这里的问题。当我strcat时,它将被覆盖而不是附加。
char temper[12];char buffeV[12];char buffe[2];
if(version<10)
{
sprintf(temper,"/0%d",version);
strcpy(buffeV, temper);
}
if(version>=10)
{
sprintf(temper,"/%d",version);
strcpy(buffeV, temper);
}
printf(" BUFFEV: %s ",buffeV);
if(fileCount<10)
{
sprintf(buffe,"0%d",fileCount);
sprintf(temper,"/0%d/0000",fileCount);
strcat(buffeV,temper);
}
if(fileCount>=10)
{
sprintf(buffe,"%d",fileCount);
sprintf(temper,"/%d/0000",fileCount);
strcat(buffeV,temper);
}
printf(" BUFFEV: %s ",buffeV);
printf的显示buffeV为/ 03,然后假定为/ 03/03/0000,则为/ 03/0000
顺便提一下,它们并不总是相同的值,这就是为什么它们是分开的。
我已经弄乱了很多,无法得到不同的结果。我还尝试专门声明“ \ 0”在哪里,以查看是否可以解决问题,但仍然没有成功。此代码有什么问题?
谢谢
注意:version和fileCount都是在其他地方声明的int。但这不是问题,在我意识到我需要检查fileCount是否大于10之前,代码实际上运行良好,这是我最初仅使用sprintf时必须添加strcat的时候
最佳答案
buffe[2]
太小。它必须至少包含3个元素。填充它的sprintf
调用溢出到堆栈上的相邻变量(buffeV
)中。 buffe
的终止NUL以buffeV[0]
结尾,因此随后的strcat(buffeV, ...)
调用在buffeV
中看到零长度的字符串。