Hi, wie bekomm ich die führenden Nullen weg? char *my_itoa(int wert, int laenge) { char *ret =(char *) malloc(laenge+1 * sizeof(char)); int i; for(i=0; i < laenge; i++) { ret[laenge-i-1] = (wert % 10) + 48; wert = wert / 10; } ret[laenge]='\0'; return ret; } Gruß Chris
Indem du wahlweise die ersten Nullen im String mit Leerzeichen überschreibst oder über einen 2.String in den du die gewünschten Zeichen des 1.Strings kopierst.Den Speicher dessen musst du dann hinterher noch freigeben...
Dann hab ich noch das Problem das ich von der Funktion einen Pointer zurück bekomm. Wie mach ich den Pointer zu einem char[]?
Den müsstest du eigentlich ohne Einschränkungen zum Ansprechen des Feldes verwenden können. Wenn du einer Funktion einen String/Array übergibst, kriegt diese auch nur nen Pointer auf die Anfangsadresse.
Wenn ich es so implementier, bekomm ich folgenden Fehler: error C2440: '=' : 'char *' kann nicht in 'char [6]' konvertiert werden char sZeit[6]="0000"; sZeit = my_itoa(iZeit,5); Nach der letzten Aussage müßte das doch gehn, weil sZeit auch nur eine Adresse ist. Was muß ich tun?
Die führenden Nullen sitzen doch im Bundestag, oder? lol Pointer sieht normal aber so aus: &string[0]
>char sZeit[6]="0000"; >sZeit = my_itoa(iZeit,5); >Nach der letzten Aussage müßte das doch gehn, weil sZeit auch nur eine >Adresse ist. sZeit ist ein array, du musst entweder der Funktion sZeit übergeben, oder char *sZeit definieren
D.h. ich muß eine Funktion schreiben die den Pointer einzeln ausliest und in ein array schreibt?
Der Knackpunkt liegt in dem Austausch von Daten bei der Funktion. Google mal nach Call by Value / Call by Reference... Du musst nen Pointer auf das zu schreibende Array übergeben. Als Rückgabewert vor dem eigentlichen Funktionsaufruf klappt das so nicht.
So:
1 | char* sZeit; |
2 | sZeit = my_itoa(iZeit,5); |
3 | |
4 | // sZeit bemachen, ausgeben, was auch immer
|
5 | |
6 | // Speicher freigeben
|
7 | free(sZeit); |
Der von my_itoa zurückgegebene Pointer wird in der Funktion dynamisch per malloc angefordert. Nach Gebrauch muss der Speicher freigegeben werden. Alternativ ist my_itoa anders zu schreiben, nämlich so, daß ein Pointer auf den zu nutzenden Speicherbereich und dessen Größe übergeben werden. Ein Rückgabewert der Funktion ist damit hinfällig. Bei untenstehendem Beispiel ist "laenge" um eins niedriger als die Anzahl der tatsächlich benötigten Bytes.
1 | void my_itoa(int wert, int laenge, char *ret) |
2 | {
|
3 | int i; |
4 | for(i=0; i < laenge; i++) |
5 | {
|
6 | ret[laenge-i-1] = (wert % 10) + 48; |
7 | wert = wert / 10; |
8 | }
|
9 | ret[laenge]='\0'; |
10 | }
|
11 | |
12 | // Gebrauch:
|
13 | |
14 | #define TEXTLAENGE 5
|
15 | |
16 | char sZeit[TEXTLAENGE + 1] = "0000"; |
17 | my_itoa(iZeit, TEXTLAENGE, sZeit); |
>Führende Nullen
Bei diesem Betreff bin ich aufmerksam geworden, musste aber feststellen,
daß ich ihn falsch verstanden hatte: Irgendwie dachte ich dabei an
gewisse "qualifizierte" Führungskräfte :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.