015
01.05.2005, 20:53 Uhr
Pablo
Supertux (Operator)
|
wenn du schon eine eigene string Klasse schreibst, dann bleibe auch ISO C++, so dass man sie auch unter anderen Systemen benutzten kann. _itoa gehört nicht zum Standard. Außerdem solltest du nach jedem new überprüfen, dass es nicht NULL wird, sonst gibt's Ärger.
Ich hab es wiederholt und nun sage ich es nochmal:
Der Aufruf append(-134) geht in die Hose, weil man "134" statt "-13" bekommt, Grund: du reservierst ein Zeichen zu wenig. 2. das ist unter Umständen kein 0-terminierendes char* (du reserviert den Speicher für \0 auch nicht).
Wozu diese Geschichte?
C++: |
if (val < 0){ append('-'); val*=-1; }
|
benutze abs()!
mach so:
C++: |
int CString::append(int val) /* kein void, es kann auch in die Hose gehen und der Programmier muss darauf vorbereitet sein */ { //Anzahl der Stellen herausfinden int totalDigits = (val < 0 ? 1 : 0) + 1 + (int)(log((double) abs(val))/log((double)10));
char *buffer = new char[totalDigits + 1];
if(!buffer) return 0;
sprintf(buffer, "%d", val);
for (int i = 0; i <= totalDigits; ++i) /* \0 muss angehängt werden */ append(buffer[i]);
delete [] buffer;
return 1; }
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 01.05.2005 um 21:04 Uhr von Pablo editiert. |