Forum: Mikrocontroller und Digitale Elektronik Funktion für string kopieren von Position a bis b


von Lutz (Gast)


Lesenswert?

Hallo zusammen,

kurze Frage: Gibt es in C auch eine Funktion mit der man aus einem 
String einen Teilstring kopieren kann, mit der man den Bereich festlegen 
kann. Ich meine nicht ...

// kopiere in textB 3 Zeichen von textA
strncpy(textB, textA, 3);


Ich muss einen Teilstring so in der Mitte eines Strings rauskopieren.

VG

von PANASONIC Infinium (Gast)


Lesenswert?

Lutz schrieb:
> strncpy(textB, textA, 3);

strncopy(target, source+offset, length);

von pepe (Gast)


Lesenswert?

in c geht das nicht. du kannst nur die länge vom anfang, ohne offset 
bestimmen/kopieren.

strncpy( string1, "Hallo", 2)--> "Ha"

von o.O (Gast)


Lesenswert?

pepe schrieb:
> in c geht das nicht.

Strings gibts in C eigentlich sowieso nicht.
Allenfalls Pointer.
Einfach das Offset auf den Pointer draufrechnen...

strncpy( string1, "Hallo"+3, 2)--> "lo"

von Lutz (Gast)


Lesenswert?

vielen Dank für die Antwort.

wenn ich jetzt aber einen Buffer befüllen will, müsste das ja so 
realisierbar sein. Allerdings klappt es nach diesem Schema nicht so 
ganz...

strncpy( stringbuffer, string1, strlen(string1) );

stringbuffer( strlen(string1) ) = ' ';

strncpy( stringbuffer + strlen(string1), string2, strlen(string2) )

stringbuffer( strlen(string2) ) = ' ';
.
.
.
.

von Karl H. (kbuchegg)


Lesenswert?

Lutz schrieb:
> vielen Dank für die Antwort.
>
> wenn ich jetzt aber einen Buffer befüllen will, müsste das ja so
> realisierbar sein. Allerdings klappt es nach diesem Schema nicht so
> ganz...
>
> strncpy( stringbuffer, string1, strlen(string1) );
>
> stringbuffer( strlen(string1) ) = ' ';

Was genau willst du hier eigentlich realisieren?

WEnn du einen String hinten an einen anderen String drannhängen willst, 
dann nimmst du nicht strcpy sondern strcat. Und natürlich gibt es da 
auch eine n Version - strncat - dazu.

Und bei den n Versionen der strxxx Funktionen immer darauf aufpassen, 
dass diese das abschliessende obligatorische \0 Byte nur unter ganz 
bestimmten Umständen im Ziel hinterlassen. Daher schreibt man sich ganz 
gerne auch eigene Funktionen, die auf strnxxx aufbauend, das 
abschliessende \0 Byte auf jeden Fall ins Ziel schreiben.

Das was du da geschrieben hast, kannst du auch einfacher formulieren
1
  strcpy( stringbuffer, string1 );
2
  strcat( stringbuffer, " " );
3
  strcat( stringbuffer, string2 );
4
  strcat( stringbuffer, " " );

Und da dieses mehr oder weniger genau so in so ziemlich jedem C-Buch als 
Einführung in die Strinverarbeitung vorkommt, bleibt für mich nur der 
Schluss, dass du auch zu der fehlgeleiteten Fraktion der 
Halbwissen-C-Programmierer gehörst, die meinen sie bräuchten kein 
C-Buch.

von DirkB (Gast)


Lesenswert?

stringbuffer( strlen(string1) ) funktioniert anders als du denkst.
() ist für Funktionen
[] ist für Arrays

Zudem brauchen die Strings in C eine '\0' am Ende. strncpy() macht das 
aber nur, wenn der komplette String kopiert wurde.

von ... (Gast)


Lesenswert?

Und das hier:
1
stringbuffer( strlen(string2) ) = ' ';
macht auch nicht was Du denkst (und nicht nur wegen der falschen 
Klammmern)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.