2014-11-28 3 views
-1

Я хочу, чтобы моя функция «ordenafile», чтобы принять candidatos.000 - candidatos.068. По какой-то причине si [0] прослушивается, я думаю, потому что, если я заставлю программу печатать si [0], он сработает. Кто-нибудь знает почему?itoa функция не работает

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

} 
+1

Попробуйте использовать 'sprintf (str,"% d ", value)' вместо 'itoa', поскольку' itoa' не является стандартной функцией. – SSC

+2

Во-первых, 'si [1]' слишком короткий для строки C, так как 'si [1]' должен быть '0'. http://stackoverflow.com/questions/190229/where-is-the-itoa-function-in-linux –

ответ

1

Ваша программа вызывает переполнение буфера, itoa записывает два символа в буфер размера 1. Чтобы исправить это, сделайте это char si[2];. Вы забыли о нулевом терминаторе.

Вам также необходимо увеличить размер si2.

Чтобы избежать такого рода ошибки, используйте snprintf вместо itoa (который не является стандартной функцией во всяком случае), например .:

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

Тогда вы никогда не получите переполнение буфера. Если вы ошиблись в размере буфера, вы получите неправильный номер, что не так уж плохо.

Смежные вопросы