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'
Hi, vielleicht hilft dir diese Seite weiter: http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/funcref.html Taz
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!"
Hi, hab es geschafft, musste nur in der Funktion selbst etwas ändern. Jetzt funktioniert alles ohne Probleme!
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.
Immerhin hat er nur viereinhalb Jahre gebraucht um das Problem zu lösen. :-) Muss sich also wohl um was einfaches handeln.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.