我希望函数“ 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);


这样就永远不会出现缓冲区溢出。如果您弄错了缓冲区大小,那么您将得到错误的数字,这并不是很糟糕。

关于c - itoa函数不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27180567/

10-13 07:40