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中看到零长度的字符串。

10-04 23:41