Puslapiai: 1
Esmė paprasta.
Rašiau žmogučiam iš technologijos.lt bet arba ten nesupranta ko aš noriu, arba jie nežino kas yra linux.. Taigis pacituosiu pats save tingėdamas perrašyt:
Sveiki,
nežinau, kaip ten būtų su windows'ais, bet linux'ai man neleidžia error'ų handle'int..
atoi () funkcija grąžina 0, jeigu kas nors negerai (pvz paduodi ne skaičių, o kokį žodį), tad žinodamas, kad grąžina 0 aš pasirašau tokį elementarų veiksmą:
if ( atoi ( konvertuojamas_kintamasis ) == 0 ) { <...> visa tai, ką noriu atlikt <...> }
Tačiau jis man žieba į akis "segmentatios fault" vietoj to, kad vykdytų tai, ką prašau..
Tiesa, kintamasis kurį turiu konvertuoti yra char tipo, o atoi () reikalauja const char *, na tai gal čia ir bėda iškyla, nes aš darau šitaip:
(const char *) mano_char
Atsijungęs
o ką tas iš technologijos.lt atrašė tau į klausimą?
Atsijungęs
Atrašė, cituoju:
Pasitikrink, ar paduodi teisingą pointerį.
wtf, aš išvis pointerio nepaduodu, ką ir rašiau poste, kad paduodu tiesiog char. Galiu įrašyt iškart į funkciją 'n' ir man rodys tą patį error'ą..
Paskutinį kartą redaguotas n0de (2011-01-25 00:17:39)
Atsijungęs
Na iš mano greitom parašyto kodo
#include <stdio.h>
#include <stdlib.h>
int main ( int argc, char *argv[])
{
char *mano_char = "20";
printf("My number in chars: %s\n", mano_char);
if ( atoi ( mano_char ) == 0 )
{
printf("Error on converting to int");
}
else
{
printf("My number in numbers: %d\n", atoi ( mano_char ) );
}
return 0;
}
Segmentation fault'ą išmesdavo, jeigu kabutes kitas parašydavau:
#include <stdio.h>
#include <stdlib.h>
int main ( int argc, char *argv[])
{
char *mano_char = '20';
......
}
Castingą C ( kas galioja ir Cpp ) daryti reikia labai retais atvėjais.
Man labai įdomu ką tu paduodi į atoi(), t.y. koks būtent yra tavo siunčiamas skaičius:
- Ar vienetinį char'ą ( char mano_char )
- Ar char pointerį ( char *mano_char )
- Jeigu pas tave yra char masyvas, tai ar yra užbaigiamas string'as ( the magic "\0" ) ?
Gal gali parodyti tavo char'o deklaravimo kodo gabalą ?
Arch Linux Lietuva
Atsijungęs
Dėkui už atsakymą
Jau man gerieji žmonės iš daniweb tą patį pasakė, kad esmė, jog nėra magic "\0" tai ir buvo esminė bėda.
Atsijungęs
C casting'as yra toks "smagus dalykas", kad net tokia nesąmonė kaip :
#include <stdio.h>
#include <stdlib.h>
void *sum ( void *, void *);
int main ( int argc, char *argv[])
{
int x = (int) sum ( (void *) 2, (void *)2 );
printf("x: %d\n", x);
return 0;
}
void *sum ( void *_a, void *_b )
{
return (int ) (int)_a + (int)_b;
}
Veikia puikiai.
Arch Linux Lietuva
Atsijungęs
Ruošiesi dalyvauti http://www.ioccc.org/ ?
Atsijungęs
Fokusų naudojimas, kai jų nereikia, yra maždaug toks pat blogis, kaip ir išankstinė optimizacija:)
Atsijungęs
Puslapiai: 1