-1

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

}
4

1 回答 1

1

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

您还需要增加si2.

为了避免这种错误,请使用snprintf代替itoa(无论如何这是一个非标准函数),例如:

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

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

于 2014-11-28T01:14:37.037 回答