|
Community Links |
Interessengemeinschaften |
Benutzerliste |
Foren durchsuchen |
Stichwortsuche |
Erweiterte Suche |
Uns unterstützen |
Shoppen bei Amazon |
Spende per Patreon |
Spende per PayPal |
Spende per Steady |
alle Möglichkeiten |
Gehe zu... |
|
Themen-Optionen | Ansicht |
2006-05-27, 20:04:50 | #1 (im Thread / einzeln) |
Admiral Member
Registriert: 2002-01-04
Beiträge: 3.609
|
[C] String in einen String einfügen
Hallo zusammen,
ich habe folgendes Problem und zwar muß ich einen C-String (char*) in einen anderen C-String an einer bestimmten Position einfügen. Kennt jemand von euch eine Lösung, die unter allen Umständen funktioniert? Meine Lösung funktioniert nur, wenn sie gerade Lust dazu hat, manchmal kommen aber irgendwo Zeichen her, die die weitere Verarbeitung fast unmöglich machen. Viele Grüße, Stone |
2006-05-27, 21:06:24 | #2 (im Thread / einzeln) |
Master Member
Registriert: 2003-12-06
Beiträge: 7.131
|
Re: [C] String in einen String einfügen
code?
generell sollte das so funktionieren: die suchst die gewüschnte stelle im ziel-string und kopiert den quell-string mit strcpy dahin. willst du die daten, die dort vorher standen retten (also den quell-string nur einhängen und nichts überschreiben lassen), dann wirst du wohl oder übel den restlichen ziel-string nach der einfüge stelle zwischenspeichern müssen und am ende wieder anhängen. zudem darft du natürlich nicht vergessen, dass der ziel-string groß genug für die ganze aktion sein muss. |
2006-05-27, 21:30:26 | #3 (im Thread / einzeln) |
Admiral Member
Threadstarter Registriert: 2002-01-04
Beiträge: 3.609
|
Re: [C] String in einen String einfügen
Wenn du meinen bisherigen Code haben willst, sollst du ihn haben.
Wie gesagt, meistens funktioniert sie, nur manchmal nicht, dann treten reproduzierbar nach strncpy Zeichen auf, die da nicht hingehören sollten. Naja, das Programm drumherum ist sowieso etwas buggy. Jede einzelne (Teil-)Funktion funktioniert, wie ich mir das Vorstelle. Füge ich alle Funktionen zusammen, dann steigt malloc sporadisch mal aus oder es gibt einen Seg-Fault oder Zeichen erscheinen, wo keine sein sollten. Aber jetzt noch auf eine andere Sprache oder auf C++-Strings umzusteigen dürfte ein zu großer Aufwand sein. (das ist der letzte Notanker) |
2006-05-27, 22:01:03 | #4 (im Thread / einzeln) |
Grandmaster Member
Registriert: 2002-08-05
Beiträge: 13.838
|
Re: [C] String in einen String einfügen
mmm...
Ganz blöd gefragt, hast du an das Endzeichen gedacht? Wenn nein, sind die sinnlosen Zeichen, wenn sie am Ende oder dort, wo die Strings zusammengeführt werden (also zwischen String 1 und String 2), erscheinen, schnell erklärt. Dann fehlt dir das Trennzeichen für das Stringende und du bekommst solange Zeichen ausgegeben, bis ein anderes Endzeichen auftaucht oder eine bestimmte Länge erreicht ist. Mit strlen kannst du die Länge eines Stringes bestimmen, damit hab ich damals ein bischen rumgetestet und Strings sinnvoll bearbeitet.
*grummel*Club der 3D-Center-Süchtigen!!!
12 Reasons Why Every Linux System Administrator Should be Lazy Meine Tipps sind Whissyware. Win10 Release Infos Trump Geändert von Lokadamus (2006-05-27 um 22:01:55 Uhr) |
2006-05-27, 22:13:24 | #5 (im Thread / einzeln) |
Admiral Member
Threadstarter Registriert: 2002-01-04
Beiträge: 3.609
|
Re: [C] String in einen String einfügen
Wird das nicht von strncpy automatisch angehängt?
EDIT: Scheinbar nicht. Laut http://www.cplusplus.com/ref/cstring/strncpy.html wird bei strncpy nicht automatisch ein \0 angehängt. Oki, dann werde ich das morgen mal testen. Bleibt dann nur noch die Frage zu klären, warum es manchmal funktioniert und manchmal nicht. Geändert von Stone2001 (2006-05-27 um 23:32:38 Uhr) |
2006-05-28, 00:16:41 | #8 (im Thread / einzeln) |
3DCenter
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
|
Re: [C] String in einen String einfügen
Hast auch ein Zeichen zusätzlich für \0 am Ende alloziert?
Du solltest nach dem ersten strncpy allerdings auch ne 0 reinschreiben ans Ende des bisherigen Strings, sonst kann strcat daneben liegen... So etwa: Geändert von Coda (2006-05-28 um 00:18:57 Uhr) |
2006-05-28, 16:40:39 | #12 (im Thread / einzeln) |
Admiral Member
Threadstarter Registriert: 2002-01-04
Beiträge: 3.609
|
Re: [C] String in einen String einfügen
Ich sollte mich wohl so langsam mit dem gdb beschäftigen.
Naja, das Problem zur Zeit ist folgendes: Funktion1 legt einen String per malloc an und gibt ihn als Rückgabewert an Funktion2. Funktion2 bearbeitet diesen String und möchte den Speicher dann nach Beendigung der Arbeit wieder mit free() freigeben. Es geht 20mal gut und dann gibt es eine invalid pointer exeception, aus heiterem Himmel. Ich habe das free() jetzt mal entfernt und fange damit an meinen Speicher mit unzähligen Strings vollzumüllen, aber dafür funktioniert das Ganze jetzt. |
2006-05-28, 17:17:16 | #13 (im Thread / einzeln) |
3DCenter
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
|
Re: [C] String in einen String einfügen
Dafür tuts im Zweifelsfall auch valgrind. Aber ich würde klar zu einer gescheiten IDE raten.
Windows oder Linux? Geändert von Coda (2006-05-28 um 17:18:12 Uhr) |
2006-05-28, 18:26:12 | #15 (im Thread / einzeln) |
3DCenter
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
|
Re: [C] String in einen String einfügen
Naja KDevelop oder Eclipse-CDT evtl. Hab ich aber noch nie den Debugger getestet bei beidem.
Aber ohne grafischen Debugger zu proggen finde ich heute schon etwas arg steinzeitlich. |
2006-05-28, 19:15:57 | #16 (im Thread / einzeln) |
Admiral Member
Threadstarter Registriert: 2002-01-04
Beiträge: 3.609
|
Re: [C] String in einen String einfügen
Eclipse-CDT habe ich gerade mal ausprobiert. Nicht schlecht was CDT inzwischen so alles bietet, aber was muß ich ändern, damit Eclipse mein Projekt erstellt, sprich make aufruft?
|
2006-05-29, 10:31:26 | #17 (im Thread / einzeln) |
Avantgarde Member
Registriert: 2001-11-15
Ort: Berlin
Beiträge: 4.181
|
Re: [C] String in einen String einfügen
Du wählst als Projekt: "Managed Make C bzw. C++"
Wenn du Verzeichnisse in den Kopilierungsprozess mit einbeziehen willst, muss man "Source Folder" als Verzeichnistyp hinzufügen ... hoffe das hilft weiter
Fortis fortuna adiuvat!
-- Ignore: Bucklew, Dural, gmb, Klevapalis, Troyan, Dampf, -/\-CruNcher-/\-, Gott1337, vinacis_vivids, Prinzenrolle, Slipknot79, TheAntitheist, DSD512, VooDoo7mx, Relex & The_Invisible, 00-Schneider, 1ch0 |
Lesezeichen |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
|
|