C - 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);
}

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

您还需要增加si2的大小。

为避免此类错误,请使用 snprintf 而不是 itoa(无论如何,这是一个非标准函数),例如:

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

然后,您将永远不会获得缓冲区溢出。如果你得到错误的缓冲区大小,那么你得到错误的数字,这还不错。

最新更新