2010-07-14 7 views
7

Hepimizin bildiği gibi, atoi bir char'i bir sayıya dönüştürür. Ancak, tüm dizi yerine yalnızca dizi elemanlardan birini istiyorsanız, ne yaparsınız?Bir char dizisinin tek tek elemanlarını atamak için atoi'yi nasıl kullanıyorsunuz?

aşağıdaki bakınız:

for (h = 0; h < 5; h++) 
{ 
    num[h] = atoi(temp[h]); 
} 

o num varsayalım tip int bir dizidir ve bu geçici ve tip char dizisi. Bu bana bu can sıkıcı dönüşüm sorunlardan biri verir: 'const char *' için 'Char'

den

geçersiz dönüşüm int bir char dizinin tek bir elemanını dönüştürmek konusunda herhangi bir öneriniz atoi kullanarak?

C'de
if (temp[h] >= '0' && temp[h] <= '9') 
{ 
    num[h] = temp[h] - '0'; 
} 
else 
{ 
    // handle error: character was not a digit 
} 

, her hanenin değeri bir önceki sayının değerine birden büyüktür, bu nedenle bu: Yalnızca tek bir karakteri dönüştürmek istiyorsanız

cevap

13

Eğer atoi() kullanmak gerekmez çalışmak garantilidir.

atoi()'un çalışmadığı nedeni, const char*'un bir bağımsız değişken olarak değil, bir char olmasını gerektirmesidir. Bu işaretçi boş sonlandırılmış bir dizeye işaret etmelidir. Sadece James ile gösterildiği gibi onun ayrılmaz değeri kullanarak yanında

+0

Tamam ... Sana atoi kullanarak dönüştürmek için gerekli düşünce(). Teşekkürler. –

+0

@kriss: Noktalı virgül için teşekkürler! Hata! –

+0

C, karakter kodlamasını tanımlamaz, bu nedenle "çalışmak için" garanti edilmez. Karakter kodlamasının ASCII olduğunu varsayıyorsunuz (ya da istenen özelliğe sahip), ki bu belki de makul bir varsayımdır, ancak bunun bir varsayım olduğunu bilmek önemlidir, bir garanti değildir. – user85509

5

, sen ayrı tampon koyabiliriz:

char buf[2] = { temp[h], '\0' }; 
num[h] = atoi(buf); 
İlgili konular