我希望我的功能“ordenafile”能够获得candidatos.000 - candidatos.068。 由于某些原因,我认为si [0]被窃听,因为如果我让程序打印si [0],它会崩溃。谁知道为什么?
int i;
char si[1],si2[2],sname[20]="candidatos.00",sname2[20]="candidatos.0";
for(i=0;i<=68;i++){
if (i<=9){
itoa(i,si,10);
sname[12]=si[0];
ordenafile(sname);
}
itoa(i,si2,10);
sname2[12]=si2[0];
sname[13]=si2[1];
ordenafile(sname);
}
答案 0 :(得分:1)
您的程序导致缓冲区溢出,itoa
将两个字符写入大小为1
的缓冲区。要解决此问题,请将其设为char si[2];
。你忘记了null终止符。
您还需要增加si2
的大小。
要避免此类错误,请使用snprintf
代替itoa
(无论如何都是非标准功能),例如:
snprintf(si2, sizeof si2, "%d", i);
然后你永远不会得到缓冲区溢出。如果你得到的缓冲区大小错误,那么你得到的数字错误,这不是很糟糕。