PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherzugriffsfehler



Shuhushu
16-02-2008, 13:55
Hallo,
Ich habe folgendes Programm gescrieben und es funktioniert auch ganz gut. Nur zeigt er mir am Ende des Programms immer einen Speicherzugriffsfehler an!

./hex-dezimal
Bitte einen HEX-WERT eingeben
F
15
Speicherzugriffsfehler


Hat jemand ne Idee woran das liegen könnte?


#include <stdio.h>

/* dieses Programm wandelt HEX-Zahlen in Dezimal-Zahlen um */

void make_dezimal(char* WERT);
void translate(char* Z);

int main(void) {
char WERT; /* deklariere Variable WERT */
printf("Bitte einen HEX-WERT eingeben\n");
scanf("%s", &WERT);
make_dezimal(&WERT);
printf("%i\n", WERT);
return 0;
}

void make_dezimal(char* WERT) {
/*printf("Der eingegebene Wert ist %s.\n", HEX);*/
char Z;
Z = *WERT;
translate(&Z);
/*printf("%i\n", Z);*/
*WERT = Z;
}

void translate(char* Z)
{
switch( *Z )
{
case '0' : *Z = 0;
/*printf("%i\n", Z);*/
break;
case '1' : *Z = 1;
/*printf("%i\n", Z);*/
break;
case '2' : *Z = 2;
/*printf("%s\n", *Z);*/
break;
case '3' : *Z = 3;
/*printf("%i\n", Z);*/
break;
case '4' : *Z = 4;
/*printf("%i\n", Z);*/
break;
case '5' : *Z = 5;
/*printf("%i\n", Z);*/
break;
case '6' : *Z = 6;
/*printf("%i\n", Z);*/
break;
case '7' : *Z = 7;
/*printf("%i\n", Z);*/
break;
case '8' : *Z = 8;
/*printf("%i\n", Z);*/
break;
case '9' : *Z = 9;
/*printf("%i\n", Z);*/
break;
case 'A' : *Z = 10;
/*printf("%i\n", Z);*/
break;
case 'B' : *Z = 11;
/*printf("%i\n", Z);*/
break;
case 'C' : *Z = 12;
/*printf("%i\n", Z);*/
break;
case 'D' : *Z = 13;
/*printf("%i\n", Z);*/
break;
case 'E' : *Z = 14;
/*printf("%i\n", Z);*/
break;
case 'F' : *Z = 15;
/*printf("%i\n", Z);*/
break;
default : *Z = "ERROR";
/*printf("ERROR%i\n", Z);*/
break;
}
}

kompiliert habe ich mit "gcc -o hex-dezimal hex--dezimal.c -Wall -fomit-frame-pointer -O3"

ContainerDriver
16-02-2008, 15:29
Hallo.

Du versucht mit


scanf("%s", &WERT);

einen String einzulesen, obwohl WERT nur vom Typ char (= Speicherung von 8 Bit möglich) ist. Wenn du jetzt bei der Eingabe z.B. ein A eingibst, will scanf "A\0" (\0 ist der Nullcharacter, der bei %s automatisch an die Eingabe angehängt wird) in den Speicherbereich von WERT schreiben, der dafür zu klein ist.
In dem Code sind übrigens noch mehr Fehler.

Gruß, Florian