konwersja int to *char

0

CZy może mi ktoś doradzić co tu jest nie tak ? bo wyczytałem na forum by użyć itoa do zamiany int na char, ale niestety program wtedy wyswietla mi 0.

char *wartosc;

DuzaLiczba::DuzaLiczba(int liczba){
		int b = 0;
		
		while(liczba=liczba/10)b++;
		 wartosc = new char (b);
	

		
		itoa(liczba,wartosc,10);
			cout<<wartosc;
		 
	}

Natomiast gdy używam konwersji niejawnej

 
int b = 0;
		
		while(liczba=liczba/10)b++;
		 wartosc = new char (b);
	

		wartosc =(char*) liczba ;
		
			cout<<wartosc;

nic mi nie wyświetla :/

2

W pierwszym kodzie źle liczysz rozmiar bufora (zawsze o dwa znaki, dla liczb ujemnych - o trzy);
W drugim przypadku traktujesz liczbę jako numer komórki w pamięci komputera i próbujesz stamtąd wyświetlić napis.
Zastanów się nad:

DuzaLiczba::DuzaLiczba(int liczba)
  {
   wartosc=new char[(int)log10(abs(liczba+0.5))+(liczba<0)+2];
   itoa(liczba,wartosc,10);
   cout<<wartosc; 
  }

ewentualnie nad:

DuzaLiczba::DuzaLiczba(int liczba)
  {
   wartosc=new char[12]; // dowolna liczba się zmieści i jeszcze na znak końca starczy
   itoa(liczba,wartosc,10);
   cout<<wartosc; 
  }

lub nawet:

DuzaLiczba::DuzaLiczba(int liczba)
  {
   cout<<liczba;
  }
0

może się wygłupi ale mógłbyś wyjaśnić co się dzieje w tym fragmencie ?

 abs(liczba+0.5))+(liczba<0)+2

abs - warto bezwzgledna, ale skąd się bierze ta cała reszta ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1