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
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
> src ist mit einfachen Anführungszeichen festgelegt -> 'ich bin src'
Das dürfte due Quelle des Problemes sein. Das ist kein String, sondern
... irgendwas.
Kompletten Quelltext mit Deklaration/Definition der verwendeten
Variablen posten, sonst wird's Glaskugelbowling.
ja ich glaub auch dass bei 'ich bin src' der Fehler liegt, so ist aber
leider das Datenmodul definiert, welches ich verwende!!
Vielen Dank für Eure Hilfe,
lg
Hannes
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'
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
> Es ist eben im Datenmodul möglich, Wörter in einfache Hochkommata zu> geben und das ist auch so gewollt,
Was soll das bitte sein? Um C-Quelltext kann es sich definitiv nicht
handeln.
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
Für Strings könnte das sogar funktionieren, er hat aber gar keinen
String.
Strings enden in C mit der sog. Nullterminierung, und die muss bei
einfachen hochkommata, im Gegensatz zu "Gänsefüßchen" explizit angefügt
werden...
> aber ich hab jetzt einfach eine fixe Länge eingegeben.
Und das ist .... die Schlechteste aller Möglichkeiten.
Berühmte letzte Worte:
"Meister, ist da Strom drauf? - Nein"
"Das Seil ist gesichert!"
"Der String hat eine konstante Länge!"
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.