【发布时间】:2014-06-27 11:59:38
【问题描述】:
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 都是在别处声明的整数。但它们不是问题,代码实际上运行良好,直到我意识到我需要检查 fileCount 是否高于 10,这是我最初只使用 sprintf 时必须添加 strcat 的时候
【问题讨论】:
-
请做一个最小的可编译示例。
sprintf(buffe, ...)调用意味着您要么打错了字,要么遗漏了变量声明。 -
你去吧,抱歉我没有注意那个变量。
-
buffe[2]也太小了。它至少需要 3 个元素。目前,您正在溢出它并破坏堆栈上相邻的任何变量。 -
我觉得这太复杂了。为什么不用
buffeV[100];和sprintf("/%02d/%02d/0000", version, fileCount);替换整个代码sn-p。 -
%02d 是否意味着每次都是 2 个字节?我不知道这个......这很有用
标签: c arrays printf strcpy strcat