mikrocontroller.net

Forum: PC-Programmierung Führende Nullen


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann hab ich noch das Problem das ich von der Funktion einen Pointer 
zurück bekomm.

Wie mach ich den Pointer zu einem char[]?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die führenden Nullen sitzen doch im Bundestag, oder? lol

Pointer sieht normal aber so aus: &string[0]

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D.h. ich muß eine Funktion schreiben die den Pointer einzeln ausliest 
und in ein array schreibt?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So:
char* sZeit;
sZeit = my_itoa(iZeit,5);

// sZeit bemachen, ausgeben, was auch immer

// Speicher freigeben
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.
void my_itoa(int wert, int laenge, char *ret) 
{
   int i;
   for(i=0; i < laenge; i++)
   {
      ret[laenge-i-1] = (wert % 10) + 48;
      wert = wert / 10;
   }
   ret[laenge]='\0';
}

// Gebrauch:

#define TEXTLAENGE 5

char sZeit[TEXTLAENGE + 1] = "0000";
my_itoa(iZeit, TEXTLAENGE, sZeit);



Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke. An die muss ich leider auch immer denken.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.