Strcat会不断覆盖我的char数组?

时间:2014-05-09 16:36:41

标签: c arrays printf strcpy strcat

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/0000它应该是/ 03/03/0000 顺便说一句,它们并不总是相同的值,这就是为什么它是分开的。 我已经搞砸了很多,不能得到不同的结果。我也试过特别声明'\ 0'在哪里可以看出是否可以解决问题,但仍然没有成功。这段代码有什么问题? 感谢

注意:version和fileCount都是在其他地方声明的int。但它们不是问题,代码实际上工作正常,直到我意识到我需要检查fileCount是否高于10,这是当我最初只使用sprintf时我必须添加strcat

2 个答案:

答案 0 :(得分:1)

更简单的方法是让sprintf为您完成所有工作:

buffeV[100];
sprintf(buffeV, "/%02d/%02d/0000", version, fileCount);

这将自动填充任何单个数字值。这是我认为你的代码试图做的。

或更安全的版本:

buffeV[100];
snprintf(buffeV, 100, "/%02d/%02d/0000", version, fileCount);

答案 1 :(得分:0)

buffe[2]太小了。它至少需要3个元素。填充它的sprintf调用溢出到堆栈中的相邻变量(buffeV)。 buffe终止NUL的结果为buffeV[0],因此后续的strcat(buffeV, ...)调用会在buffeV中看到一个零长度的字符串。