Search code examples
cstringitoa

itoa function not working


I want my function "ordenafile" to take candidatos.000 - candidatos.068. For some reason si[0] is bugged i think, cause if I make the program prints si[0], it crashes. Anyone knows why?

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

}

Solution

  • Your program causes a buffer overflow, itoa writes two characters to a buffer of size 1. To fix this, make it char si[2]; . You forgot about the null terminator.

    You also need to increase the size of si2.

    To avoid this sort of error, use snprintf instead of itoa (which is a non-standard function anyway), e.g.:

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

    Then you will never get a buffer overflow. If you get the buffer size wrong then you get the wrong number , which is not quite so bad.