-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

あなたのプログラムはバッファ オーバーフローを引き起こし、itoasize のバッファに 2 文字を書き込みます1。これを修正するには、 にしchar si[2];ます。null ターミネータを忘れていました。

のサイズも大きくする必要がありsi2ます。

この種のエラーを回避するには、snprintf代わりにitoa(これは非標準関数です) を使用します。たとえば、次のようにします。

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

そうすれば、バッファオーバーフローが発生することはありません。バッファ サイズを間違えると、間違った number が得られますが、それほど悪くはありません。

于 2014-11-28T01:14:37.037 に答える