[C] Access segmentation fault raised in your program
lima-city → Forum → Programmiersprachen → C/C++ und D
array
beginnen
code
datei
deklaration
enden
fehler
file
folgenden code
folgendes problem
gleichen verzeichnis
mathe
null
pause
pfad
programm
system
text
treten
vokabel
-
Hi Leute,
Ich habe folgendes Problem:
Ich habe mit dem gleich folgenden Code versucht, ein Programm zu erstellen, welches den Text in einer Datei
"encrypted" oder "decrypted" für das Programm ist die Richtung egal.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int main(int argc, char *argv[]) { // Deklarationen beginnen hier int x; int y; char text[10000]; char text2[10000]; char text3[10000]; FILE *to_crypt; FILE *final_product; to_crypt = fopen("Vokabeln.txt","r"); final_product = fopen("Mathe.txt","w"); char in[] = {"aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß? "};//61 char out[] = {"xXnNuUkKgGyYeEqQpPwWdDäÄß?bBzZiIhHöÖüÜvVcCtTjJaAfFoOlLrRsSmM "};//61 if(to_crypt==NULL) { printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n"); } if(final_product==NULL) { printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n"); } else; // Deklarationen enden hier while( fgets(text, sizeof(text), to_crypt) !=0 ) strcpy(text2,text); for(x=0;x<=sizeof(text2);x++) { for(y=0;y<=61;y++) { if((strcmp(text2[x],in[y])==0)) { strcat(text3,out[y]); //Hier tritt der Fehler auf } else; } } fputs(text3,final_product); remove("Vokabeln.txt"); system("PAUSE"); return 0; }
DIe Datei Vokabeln.txt muss sich natürlich im gleichen Verzeichnis befinden ;)
Ich habe die Stelle mit dem Fehler gekennzeichnet, im Debug Mode sagt mir der Debugger immer
"An Acces Violation (Segmentation Fault) raised in your program"
Ich kann den Fehler nicht finden, hat jemand eine Idee?
Mit freundlichen Grüßen
InfinitySounds -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst dir das strcpy(text2, text); sparen. Als nächstes: warum strcmp? Es reicht ein einfaches
. Und strcat ist natürlich auch hier falsch. Des weiteren hast du vergessen, dass ein Array bei 0 anfängt und bis Länge-1 endet. Du versuchst auf array[Länge] zuzugreifen, was außerhalb des Arrays liegt.text2[x] == in[y]
Du möchtest eine Datei löschen, die du noch offen hast?
Ich hab deinen Code aufgeräumt, umformatiert und ausgebessert:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int main(int argc, char *argv[]) { // Deklarationen beginnen hier int x; int y; char text[10000]; FILE *to_crypt; FILE *final_product; char in[] = {"aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZäÄöÖüÜß? "}; char out[] = {"xXnNuUkKgGyYeEqQpPwWdDäÄß?bBzZiIhHöÖüÜvVcCtTjJaAfFoOlLrRsSmM "}; to_crypt = fopen("Vokabeln.txt","r"); final_product = fopen("Mathe.txt","w"); if(!to_crypt) { printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n"); } if(!final_product) { printf("Fehler beim Oeffnen! Bitte ueberpruefe deinen Pfad!\n"); } // Deklarationen enden hier while(fgets(text, sizeof(text), to_crypt) != 0) { for(x = 0; x < sizeof(text); x++) { for(y = 0; y < sizeof(in); y++) { if(text[x] == in[y]) { text[x] = out[y]; break; } } } fputs(text, final_product); } fclose(final_product); fclose(to_crypt); remove("Vokabeln.txt"); system("PAUSE"); return 0; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage