Ĺadny brzuch
Witam!
Mam w łańcuchu typu unsigned char * napis, będący liczbą (np. 1234).
Chcę zamienić go na int-a, którego wartość będzie tą właśnie liczbą.
Napisałem następujący program:
#include <iostream> using namespace std; main() { unsigned char *podane; const char *stala; int zwrot; cout << "Napis" << endl; cin >> podane; cout << "Wczytałem: " << podane << endl; stala=(const char *)podane; cout << "Po zamianie na const char *: " << stala; zwrot=atoi(&stala); cout << "A oto koncowy efekt: " << zwrot; }
Jednak przy kompilacji dostaję błędy:
zamiana.cpp: In function 'int main()':
zamiana.cpp:12: error: cast from 'unsigned char*' to 'const char'
loses precision
zamiana.cpp:12: error: invalid conversion from 'const char' to 'const
char*'
zamiana.cpp:14: error: cannot convert 'const char**' to 'const char*'
for argument '1' to 'int atoi(const char*)'
Czy ten sposób jest dobry, tylko robię gdzieś błąd, czy lepiej zrobić
to inaczej? Z góry dziękuję za pomoc!
ała... heh, zabawne kody sie tworzy patrzac na definicje funkcji :)
otoz to, ze w parametrze pisze const char *, nie znaczy ze ty musisz podawac stala - oznacza tylko, ze ta wartosc nie bedzie zmieniona wewnatrz funkcji. wystarczy zwykle:
unsigned char *podane;
int zwrot;
cin >> podane;
zwrot = itoa(podane);
wystarczy zwykle:
unsigned char *podane;
int zwrot;
cin >> podane;
zwrot = itoa(podane);
Zwrot z kompilatora:
zamiana.cpp:11: error: invalid conversion from ‘unsigned char*’ to ‘const char*’ zamiana.cpp:11: error: initializing argument 1 of ‘int atoi(const char*)’
zwrot = itoa(podane);
a to nie powinno być
zwrot=int(podane);
?
zwrot = itoa(podane);
a to nie powinno być
CYTAT
zwrot=int(podane);
?
Odp: Nie. Powinno być atoi(podane);
@dandys997
W swoim kodzie zamień linijkę:
unsigned char *podane;
na:
unsigned char podane[5];
i wszystko będzie ok. Nie możesz odwoływać się do wartości wskaźnika, kiedy nie wskazuje na żadne konkretne miejsce w pamięci.
Nie możesz odwoływać się do wartości wskaźnika, kiedy nie wskazuje na żadne konkretne miejsce w pamięci.
Ujmę to nieco inaczej. Móc może, bo przecież to zrobił, takie są w końcu uroki C++. Pytanie po co? Chyba tylko, żeby spowodować błąd w programie :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam w łańcuchu typu unsigned char * napis, będący liczbą (np. 1234).
Chcę zamienić go na int-a, którego wartość będzie tą właśnie liczbą.
Napisałem następujący program:
#include <iostream> using namespace std; main() { unsigned char *podane; const char *stala; int zwrot; cout << "Napis" << endl; cin >> podane; cout << "Wczytałem: " << podane << endl; stala=(const char *)podane; cout << "Po zamianie na const char *: " << stala; zwrot=atoi(&stala); cout << "A oto koncowy efekt: " << zwrot; }
Jednak przy kompilacji dostaję błędy:
zamiana.cpp: In function 'int main()':
zamiana.cpp:12: error: cast from 'unsigned char*' to 'const char'
loses precision
zamiana.cpp:12: error: invalid conversion from 'const char' to 'const
char*'
zamiana.cpp:14: error: cannot convert 'const char**' to 'const char*'
for argument '1' to 'int atoi(const char*)'
Czy ten sposób jest dobry, tylko robię gdzieś błąd, czy lepiej zrobić
to inaczej? Z góry dziękuję za pomoc!
ała... heh, zabawne kody sie tworzy patrzac na definicje funkcji :)
otoz to, ze w parametrze pisze const char *, nie znaczy ze ty musisz podawac stala - oznacza tylko, ze ta wartosc nie bedzie zmieniona wewnatrz funkcji. wystarczy zwykle:
unsigned char *podane;
int zwrot;
cin >> podane;
zwrot = itoa(podane);
wystarczy zwykle:
unsigned char *podane;
int zwrot;
cin >> podane;
zwrot = itoa(podane);
Zwrot z kompilatora:
zamiana.cpp:11: error: invalid conversion from ‘unsigned char*’ to ‘const char*’ zamiana.cpp:11: error: initializing argument 1 of ‘int atoi(const char*)’
zwrot = itoa(podane);
a to nie powinno być
zwrot=int(podane);
?
zwrot = itoa(podane);
a to nie powinno być
CYTAT
zwrot=int(podane);
?
Odp: Nie. Powinno być atoi(podane);
@dandys997
W swoim kodzie zamień linijkę:
unsigned char *podane;
na:
unsigned char podane[5];
i wszystko będzie ok. Nie możesz odwoływać się do wartości wskaźnika, kiedy nie wskazuje na żadne konkretne miejsce w pamięci.
Nie możesz odwoływać się do wartości wskaźnika, kiedy nie wskazuje na żadne konkretne miejsce w pamięci.
Ujmę to nieco inaczej. Móc może, bo przecież to zrobił, takie są w końcu uroki C++. Pytanie po co? Chyba tylko, żeby spowodować błąd w programie :)