strlen()

Gast #497053
Lesenswert?

Hallo,

ich habe eine triviale Frage, die mir aber in meinem Programm ziemlich 
viel Kopfzerbrechen bereitet hat.
Meine Frage wäre, was die Funktion strlen() im String sucht, um die 
Stringlänge festzustellen (nach der Nullterminierung?). Die Länge wird 
ja ohne  die Nullterminierung zurückgeliefert.

Ich habe untere Zeile in meinem Code gehabt und strlen() hat mir viel zu 
viel reinkopiert, sprich strlen hat nicht die richtige Länge 
zurückgegeben sondern viel mehr, ich hab das auf das Display ausgegeben 
und da standen dann noch Daten von einem anderen Array -> also von einem 
anderen Speicherbereich.



memcpy(&ziel[15], &src, strlen(src));
src ist mit einfachen Anführungszeichen festgelegt -> 'ich bin src'

Vielleicht hat da jemand eine Erklärung!

Vielen Dank für Eure ANtworten
lg
Hannes
#497066
Lesenswert?

strlen sucht nach dem '\0' Zeichen am Ende jedes Strings.

Warum verwendest du die mem... Funktionen.
Für strings gibt es die str... Funktionen die
das alles berücksichtigen.

   strcpy( &ziel[15], src );

(Das ziel[15], sieht seltsam aus. Möglich wäre es
theoretisch, ich denke aber nicht, dass es richtig
ist. Aber ohne mehr Zusammenhang ist das nicht
zu entscheiden)


> sprich strlen hat nicht die richtige Länge zurückgegeben sondern
> viel mehr, ich hab das auf das Display ausgegeben und da standen
> dann noch Daten von einem anderen Array -> also von einem
> anderen Speicherbereich.

strlen liefert die Länge ohne den '\0'.
Daher hast du den '\0' nicht mitkopiert und daher war
im Ziel auch kein '\0' vorhanden. Alle nachfolgenden
string-Funktionen haben sich daher einen Wolf nach
dem '\0' gesucht und beinhart alles aus dem Speicher
geholt, bis irgendwann dann mal ein '\0' aufgetaucht ist.


http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
Persönliche Seite #497178
Lesenswert?

Hast Du den zweiten Teil meines Beitrages nicht gelesen?

> Kompletten Quelltext mit Deklaration/Definition der verwendeten
> Variablen posten, sonst wird's Glaskugelbowling.

"So ist aber leider das Datenmodul definiert" ... bla. Wenn Du mit 
-anscheinend- falschen Dingen arbeitest, dann musst Du die 
korrigieren; wenn Du damit arbeiten musst, dann musst Du denjenigen, der 
den FEHLER zu verantworten hast, darauf hinweisen.

Es gibt in C keine Strings, die in einfachen Hochkommata notiert werden.

   'ich bin kein String in C'


Gast #497856
Lesenswert?

Es ist eben im Datenmodul möglich, Wörter in einfache Hochkommata zu 
geben und das ist auch so gewollt, Man muss halt dann für die 
Terminierung selbst sorgen und genau das war mein Problem mit strlen, 
aber ich hab jetzt einfach eine fixe Länge eingegeben.

Ich kann das ganze programm nicht posten, es besteht aus 6 Modulen und 
diese sind sehr lang.

Vielen Dank für Eure Antworten und Anregungen!!!!

lg
Hannes
Gast #498072
Lesenswert?

Hallo, Hannes
Ganz versteh' ich die Sache mit den Hochkommas ja nicht, hier dennoch 
mein Senf dazu...

Ich würde anstelle von
memcpy(&ziel[15], &src, strlen(src));
mal
memcpy(&ziel[15], src, strlen(src));
probieren.
src ist bereits ein Zeiger auf das erste Zeichen des Strings, &src ist 
die Adresse der Variable src, nicht des Strings.

Vielleich hilft das ja ein wenig

lg
Luigi
Moderator (Firma: Titel) Persönliche Seite #2426559
Lesenswert?

Karl Heinz Buchegger schrieb:
> Berühmte letzte Worte:
> "Meister, ist da Strom drauf? - Nein"
> "Das Seil ist gesichert!"
> "Der String hat eine konstante Länge!"
"Mein Programm läuft."

Hannes Weninger schrieb:
> Es ist eben im Datenmodul möglich, Wörter in einfache Hochkommata zu
> geben und das ist auch so gewollt
Wenn das (ominöse) "Datenmodul" (vom dubiosen Datenmogul) über ein 
#include eingebunden wird, dann könnte man ja sowas probieren:
1
#define ' "
;-)

Im Ernst: erwartest du dir allgemeine Hilfe, wenn du spezielle 
Anforderungen hast und diese nicht offenlegst.
Was ist denn dieses "Datenmodul"?
Warum haben deine Programme überhaupt "Module"?
Die "üblichen" Programme bestehen aus Sourcecode- oder Quelltextdateien.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren