2017-02-26 1 views
-3

Ich schrieb diesen Code gestern. Es kompiliert/baut fehlerfrei ohne Fehler auf und öffnet eine Windows-Eingabeaufforderung, die mich auffordert, einen Originaltext einzugeben. Ich gebe den Originaltext ein, den mein Programm kodieren soll und drücke Enter. Dies führt zu dem folgenden Fehler:Wie behebe ich Fehler: Exception bei 0x00007FFC284DDDFF (ucrtbased.dll) in EncodeTextApp.exe geworfen: 0xC0000005

Exception thrown at 0x00007FFC284DDDFF (ucrtbased.dll) in EncodeTextApp.exe: 0xC0000005: Access violation writing location 0x00007FF7CAEC9C23.

If there is a handler for this exception, the program may be safely continued.

Diese Ausnahme oben passiert, wenn ich Eingabe der Nachricht, die ich in der Eingabeaufforderung codieren möchte, wenn das Programm ausgeführt wird. Dann stürzt es einfach ab.

Der folgende Code ist der aus meiner Anwendung. Ich weiß nicht, ob ich hier etwas falsch mache.

#include <stdlib.h> 
#include <conio.h> 
#include <iostream> 

#define MAX_LEN 80 
#define encodingshift 17 

char* encode(char* str) { 
    int i = 0; 
    while (str[i] != '\0') { 
     str[i] = str[i] - encodingshift; 
     /*str[i] = (char)((int)str[i] + encodingshift) % 26;*/ 
    } 
return (str); 
} 

void main() { 
    char *str = ""; 

    printf("Please enter the message to encode: "); 
    fgets(str, MAX_LEN, stdin); 
    char* original = str; 

    str = encode(str); 
    printf("\nOriginal Message: %s", original); 
    printf("\nEncoding Shift: %d", encodingshift); 
    printf("\nEncoded message: %s", str); 
    getchar(); 
} 

Ich habe alles getan, von der Deinstallation des C++ Artikels von Visual Studio und Neuinstallation von ihnen, die gesamten Visual Studio wieder zu installieren, aber der Fehler nicht weggeht. Daher würde ich gerne wissen, was ich zu tun habe. Es ist das einzige, was mich davon abhält, dass meine Programme funktionieren.

+1

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+0

Die Sache ist, dass ich schon den Debugger durchgesehen habe. – lobfil

+0

Also genau * wann * wirft es die Ausnahme? –

Antwort

3
char *str = ""; 

printf("Please enter the message to encode: "); 
fgets(str, MAX_LEN, stdin); 

falsch ist, str ein Zeichenfolgenliteral ist (tipically auf Nur-Lese-Segmente platziert, also nicht veränderbar) und Sie Raum benötigen die Zeichenfolge zu speichern, mit fgets, Änderung:

char str[MAX_LEN]; 

und

str = encode(str); /* str now is an array, you can not assign to */ 

zu

encode(str); 

Und beachten Sie, dass Sie nicht i in der while Schleife (Endlosschleife)

Auch Erhöhen Sie mischen C und C++, tun das nicht, wenn Sie C wollen, iostreamstdio.h sein sollte und ein verwenden gültige Signatur für main: int main(void) anstelle von void main()

+0

Vielleicht möchten Sie den letzten Para löschen, da das OP dies jetzt zu einer reinen C-Frage gemacht hat. –

+0

@MartinBonner, das ist was ich sage: 'iostream' ist keine C-Kopfzeile :) –

+0

Ich bekomme nur nicht, wenn ich all dies ersetzen muss ' '' char * str = ""; printf ("Bitte die zu kodierende Nachricht eingeben:"); fgets (str, MAX_LEN, stdin); '' ' mit den folgenden: ' char str [MAX_LEN]; 'oder nur die erste Zeile. – lobfil

Verwandte Themen