Zurück   3DCenter Forum > Software-Hilfe Foren > Programmierung
Registrieren Hilfe Community Kalender Heutige Beiträge Suchen Uns unterstützen

Antwort
 
Themen-Optionen Ansicht
Alt 2006-05-27, 20:04:50   #1 (im Thread / einzeln)
Stone2001
Admiral Member
 
Benutzerbild von Stone2001
 
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

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 21:06:24   #2 (im Thread / einzeln)
maximAL
Master Member
 
Benutzerbild von maximAL
 
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.
maximAL ist gerade online   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 21:30:26   #3 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
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.
Code:
void insertString (char* target, char* source, char* input, int pos)
{
      strncpy(target, source, pos);
      strcat(target, input);
      source = source + pos;
      strcat(target, source);
}
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)

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 22:01:03   #4 (im Thread / einzeln)
Lokadamus
Grandmaster Member
 
Benutzerbild von Lokadamus
 
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.


Geändert von Lokadamus (2006-05-27 um 22:01:55 Uhr)
Lokadamus ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 22:13:24   #5 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Zitat von Lokadamus:
mmm...

Ganz blöd gefragt, hast du an das Endzeichen gedacht?
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.

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".

Geändert von Stone2001 (2006-05-27 um 23:32:38 Uhr)
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 23:02:23   #6 (im Thread / einzeln)
Coda
3DCenter
 
Benutzerbild von Coda
 
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
Re: [C] String in einen String einfügen

Ist dein target-Buffer groß genug?


Geändert von Coda (2006-05-27 um 23:03:21 Uhr)
Coda ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-27, 23:32:25   #7 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Sofern malloc richtig funktioniert... Der Speicher für den Targetbuffer wird vor dem Aufruf der obigen Funktion erledigt (analog zu strcpy).

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 00:16:41   #8 (im Thread / einzeln)
Coda
3DCenter
 
Benutzerbild von Coda
 
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:
Code:
void insertString (char* target, char* source, char* input, int pos)
{
      strncpy(target, source, pos);
      target[pos] = 0;
      strcat(target, input);
      source = source + pos;
      strcat(target, source);
}


Geändert von Coda (2006-05-28 um 00:18:57 Uhr)
Coda ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 11:27:24   #9 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Zitat von Coda:
Hast auch ein Zeichen zusätzlich für \0 am Ende alloziert?
Yup, habe ich.
Zitat von Coda:
Du solltest nach dem ersten strncpy allerdings auch ne 0 reinschreiben ans Ende des bisherigen Strings, sonst kann strcat daneben liegen...
Das werde ich nachher mal testen.

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 16:17:18   #10 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Oki, super, wenigsten das funktioniert jetzt.

Jetzt muß ich nur noch das free() finden, dass mir immer die invalid pointer exceptions wirft.

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 16:26:38   #11 (im Thread / einzeln)
Coda
3DCenter
 
Benutzerbild von Coda
 
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
Re: [C] String in einen String einfügen

Hast du keinen Debugger?

Coda ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 16:40:39   #12 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Zitat von Coda:
Hast du keinen Debugger?
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.

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 17:17:16   #13 (im Thread / einzeln)
Coda
3DCenter
 
Benutzerbild von Coda
 
Registriert: 2003-12-23
Ort: Frankfurt Main
Beiträge: 32.566
Re: [C] String in einen String einfügen

Zitat von Stone2001:
Ich sollte mich wohl so langsam mit dem gdb beschäftigen.
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)
Coda ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 17:54:09   #14 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
Registriert: 2002-01-04
Beiträge: 3.609
Re: [C] String in einen String einfügen

Zitat von Coda:
Dafür tuts im Zweifelsfall auch valgrind. Aber ich würde klar zu einer gescheiten IDE raten.

Windows oder Linux?
In diesem Fall: Linux

Zur Zeit verwende ich Scite, falls du was besseres kennst ..., ich bin für alles offen.

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 18:26:12   #15 (im Thread / einzeln)
Coda
3DCenter
 
Benutzerbild von Coda
 
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.

Coda ist offline   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-28, 19:15:57   #16 (im Thread / einzeln)
Stone2001
Admiral Member
Threadstarter
 
Benutzerbild von Stone2001
 
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?

Zitat von Grumble (aus comp.arch):
Yes, Intel has, indeed, extended the aging IA-32 architecture to 64-bit.
They've called this new technlogy "AMD64".
Stone2001 ist offline Computer-Informationen von Stone2001 anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Alt 2006-05-29, 10:31:26   #17 (im Thread / einzeln)
Achill
Avantgarde Member
 
Benutzerbild von Achill
 
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
Achill ist gerade online Computer-Informationen von Achill anzeigen   Mit Zitat antworten Beitrag zum Zitieren auswählen
Antwort

Lesezeichen
  • Dieses Thema bei Twitter speichern
  • Dieses Thema bei Facebook speichern


Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34:27 Uhr.


Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.