Elektronik & mp3 h- mpeg der erste standalone mp3 Player im Eigenbau
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
DB
Anmeldungsdatum: 22.04.2004 Beiträge: 8
|
Verfasst 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 |
|
 |
Gast Gast
|
Verfasst 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.
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 |
|
 |
|
|
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.
|
|