Rain Geschrieben 11. Februar 2003 Geschrieben 11. Februar 2003 Hy Zwei Fragen zu Zeichenketten 1.) Ich möchte von einer Zeichenkette einfach die letzten vier Zeichen abschneiden nur funkt das nicht ganz. Hier mein code: void printtitle(int my_ind) { int l=0; l = strlen(pllist[my_ind]); char helpst[(l-4)]; strncpy(helpst, pllist[my_ind],(l-4)); puts(helpst); } Anmerkungen: pllist[] ist vom Typ char* Der hier dargestellte Code funktioniert einmal, dann wieder nicht und zwar werden irgendwelche "komischen" Zeichen an die Zeichenkette angehängt. 2.) Wie kann ich die Einträge sie sich im Array pllist[] das vom Typ char* ist nach dem ABC ordnen? Besten Dank im Vorraus Rain Zitieren
Klotzkopp Geschrieben 12. Februar 2003 Geschrieben 12. Februar 2003 Originally posted by Rain char helpst[(l-4)];Du reservierst zuwenig Speicher für helpst. Du brauchst noch ein weiteres Byte für das Nullbyte, das bei C-Strings als Endmarkierung verwendet wird, das strlen aber nicht mitzählt. l-3 sollte es also tun. Außerdem ist es eine Eigenart von strncpy, dass diese Funktion das terminierende Nullbyte nicht setzt, wenn der zu kopierende String länger ist, als man angibt. Das ist bei dir immer der Fall, also musst du das letzte char von helpst selbst auf Null setzen. Wie kann ich die Einträge sie sich im Array pllist[] das vom Typ char* ist nach dem ABC ordnen?Von Hand, mit einem Sortieralgorithmus deiner Wahl. Falls du C++ verwenden kannst, würde ich aber empfehlen, aus dem Array von char* einen std::vector<std::string> zu machen. Damit bist du nicht nur deine ganzen Probleme mit Arrays und Zeigern los, sondern kannst auch über std::sort komfortabel sortieren. Zitieren
nic_power Geschrieben 12. Februar 2003 Geschrieben 12. Februar 2003 Hallo, Oder - falls man keine Lust auf eine Selbstimplementierung hat - mit der folgenden Bibliotheksfunktion: void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); @Rain: Du solltest such noch berücksichtigen, dass Deine Strings unter Umständen kürzer als vier Zeichen sein können. Oder ist das ausgeschlossen? Nic Zitieren
maxim_42 Geschrieben 12. Februar 2003 Geschrieben 12. Februar 2003 Geht sowas wie char helpst[(l-4)]; überhaupt? Muss da nicht dynamisch Speicher angefordert werden? l steht doch erst zur Laufzeit fest, oder? Zitieren
nic_power Geschrieben 12. Februar 2003 Geschrieben 12. Februar 2003 Ja, geht. Die Diskussion hatten wir schon mal vor einiger Zeit: http://www.fachinformatiker-world.de/forums/showthread.php?s=&threadid=34906&highlight=stack Nic Zitieren
maxim_42 Geschrieben 12. Februar 2003 Geschrieben 12. Februar 2003 Interessant, man lernt nie aus: Danke für die Auskunft. Zitieren
Rain Geschrieben 12. Februar 2003 Autor Geschrieben 12. Februar 2003 @Klotzkopp Danke für deine informative Antwort. Werde deine Tipps versuchen nun umzusetzen . Rain Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.