Elektronik & mp3
h- mpeg der erste standalone mp3 Player im Eigenbau
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

String operationen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Elektronik & mp3 Foren-Übersicht -> h-mpeg
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DB



Anmeldungsdatum: 22.04.2004
Beiträge: 8

BeitragVerfasst am: 04.06.2004, 10:50    Titel: String operationen

Hallo,
ich habe nicht die meiste Ahnung von C++, aber vielleicht kann mir hier jemand helfen ??

Ich habe einen String (name) der beliebig viel Zeichen lang ist . Dieser String soll jetzt genau 18 Zeichen lang sein! Wenn er länger ist soll er einfach abgeschnitten werden, ist er kürzer sollen Leerzeichen angefügt werden bis er 18Zeichen lang ist.

Habs schon mit strncpy probiert aber irgendwie komme ich mit dem strncpy von AVR GCC nicht klar.

Kann mir jemand helfen am besten mit Code Beispiel??

Im voraus Danke.

Gruß Dominik

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast
Gast





BeitragVerfasst am: 04.06.2004, 16:00    Titel:

Hi, erstmal sorry, aber ich hab keinen Plan von avr gcc, bin mehr oder weniger zufällig über die Seite hier gestolpert. Wink

strncpy ist eigentlich schon das richtige, aber das füllt den restlichen String nicht mit Leerzeichen sondern mit \0en auf, da müsstest du also Hand anlegen (also in einer Schleife über den String gehen).
Außerdem hat strncpy den Fallstrick dass er keine Nullterminierung setzt.

Alternative ist mir die folgende Implementierung eingefallen, aber kA ob die effizienter ist:

#include <string.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
char bla[6];
memset(bla, ' ', 5);
char *end = (char*)memccpy(bla, argv[1], '\0', 5);
if (end != NULL)
*(end-1) = ' ';
bla[5] = '\0';
printf(">>%s<<\n", bla);
return 0;
}

memset setzt erstmal alle chars auf Leerzeichen.
memccpy kopiert einen Speicherbereich, bis entwerder ein festgelegtes Zeichen auftaucht (hier '\0' für Stringende) oder eine feste Anzahl (hier 5) byte kopiert wurden. Der Rückgabewert ist das byte hinter dem zuletzt geschriebenen (also direkt hinter dem \0) oder NULL wenn kein \0 aufgetaucht ist.
strncpy ist fast das gleiche, nur dass man nicht den Rückgabewert bekommt (sondern nochmal den pointer auf bla) und strncpy eben den restlichen String mit \0s auffüllt.
Danach stimmen noch 2 Sachen nicht: Wir haben evtl nen \0 hinter dem kopierten String wenn das original kürzer als 5 Zeichen war und wir haben keine Nullterminierung am Ende des Arrays (der Inhalt eines Arrays nach der initialisierung ist afaik laut Spezifikation undefiniert, da könnte also alles mögliche stehen), das muss also korrigiert werden.

Nach oben
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Elektronik & mp3 Foren-Übersicht -> h-mpeg Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


vollkornpapier.de ©