itoa功能不起作用

时间:2014-11-28 00:57:32

标签: c string itoa

我希望我的功能“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);

}

1 个答案:

答案 0 :(得分:1)

您的程序导致缓冲区溢出,itoa将两个字符写入大小为1的缓冲区。要解决此问题,请将其设为char si[2];。你忘记了null终止符。

您还需要增加si2的大小。

要避免此类错误,请使用snprintf代替itoa(无论如何都是非标准功能),例如:

snprintf(si2, sizeof si2, "%d", i);

然后你永远不会得到缓冲区溢出。如果你得到的缓冲区大小错误,那么你得到的数字错误,这不是很糟糕。