Segemtation Fault in simplem Script
-
halloooooh
ich schlage mich mal wieder mit Lapalien rum und bekomms nicht hin.
Es soll mit diesem Programm eine Liste "AXEB" umgewandelt werden in "1542".
Bei der Ausführung bekomme ich dann folgende Meldung:
"Eine Zugriffsverletzung (Segmentation Fault) trat in Ihrem Programm auf"#include <stdio.h> #include <string.h> char* toNoten(const char *gp); const char *anfliste; char *dings; int main(void){ anfliste = "AXEB"; printf ("\n Hier die Anfangliste %s und die neue: %s", anfliste, toNoten(anfliste)); return 0; } char* toNoten(const char *gp){ int i; int n; n = strlen(gp); for (i=0; i<n; i=1+1){ if (gp[i]=='A') dings[i]=1; else if (gp[i]=='B') dings[i]=2; else if (gp[i]=='C') dings[i]=3; else if (gp[i]=='E') dings[i]=4; else if (gp[i]=='X') dings[i]=5; } ; return dings; }
Wo liegt mein Fehler??? Ich find das sieht ganz gut aus
-
Du reservierst nirgends speicher fuer "dings". Bitte benutz fuer solche "trivialen" Fehler doch den Debugger, der hilft dir da viel schneller als wir das koennen
-
joa danke ...
ich dings irgendwie nicht richtig ...
is ja auch n char und ich pack int`s rein. geht ja so auch nciht oder?
es soll aber ausdrücklich ein char* zurückgegebn werden.
wie fülle ich dings richtig???
-
google nach "malloc"
-
liegt es wirklich daran???
ich habe jetzt so speicher reserviert, das das bestimmt so von der größe nicht sinnvoll ist bitee einfach mal außen vor lassen:char *dings = ( char*)malloc(1000);
ich bekomme aber immernoch wenn ich mir "toNoten(anfliste)" ausgeben lasse ein paar smileys und ein herzchen oder so
was ist das problem?
-
Du musst an die \0 Terminierung von Strings denken.
-
hmmm hab dazu gegoogelt aber leider nix erklärendes gefunden!?
die \0 Terminierug heißt für mich also was? sorry - ich hab wirklich nix hilfreiches gefunden!?!
-
leute bitte helft mir .... ich find leider nix... ich hab morgen eine klausur und brauch hierfür noch die lösung. ich weiß das es den anschien hat es würde es mir an eigeninitiative fehlen ...
aber mir fehlt es nur an zeit.
bitte
-
Ich glaube du hast noch mehrere Fehler drin.
Guck dir mal deine for Schleife an, vor allem den Teili=1+1
so kommst du nicht weit.
Außerdem meinst du bei der Zuweisung sicherlich
dings[i]='1';
denn sonst fügst du den ASCII Code 1 ein, und das ist ein Sonderzeichen.
-
Mit der Zuweisung dings[i] = 1 weist Du dem Zeichen an der Position i den ASCII-Code 1 zu. Und das ist in der DOS-Konsole z.B. ein Herzchen. (vgl. http://de.wikipedia.org/wiki/ASCII). Das Zeichen '1' hat z.B. den ASCII-Code 31 (hexadezimal).
Also musst Du dem Zeichen entweder den ASCII-Code des Zeichens '1' zuweisen, oder - was viel einfacher ist - einfach das Zeichenliteral selbst. Du vergleichst ja auch mit "'A'" und nicht mit "A".
if (gp[i]=='A') dings[i]='1'; else if (gp[i]=='B') dings[i]='2'; ...
-
ja super hat geklappt ... nur noch eine kleine frage...
warum bekomme ich bei folgendem printfprintf("\n Schaun doch mal: %s", dings);
welches ich vor "return dings" in toNoten habe. folgende ausgabe:
!||1/21/21/21/21/21/21/21/2h doch mal : 1547
???