2016-07-20 17 views
-4

Wenn ich meine C-Codes kompilieren manchmal bekomme ich diese Fehlermeldung.Laufzeitfehler beim Ausführen meines Codes

Mycode.exe funktioniert nicht mehr ..
Ein Problem verursacht das Programm nicht richtig funktioniert.
Windows schließt das Programm und benachrichtigt Sie, wenn eine Lösung verfügbar ist.

Mein C-Code:

#include<stdio.h> 

main(){ 
    char a; 
    a="S"; 
    printf("%s",a); 
} 

Also, was ist der Grund für dieses Problem?
Syntaxfehler, Laufzeitfehler oder ein anderer Grund?

+0

Bitte teilen Sie Ihren Code oder Fragen etwas spezifischer. – Marievi

+0

#include main() { Zeichen a; a = "S"; printf ("% s", a); } –

+1

Es bedeutet (a) Sie kompilieren und verknüpfen Ihr Programm nicht nur; Sie führen es auch aus. Und (b) Ihr Programm ruft * undefiniertes Verhalten * auf, das glücklicherweise eine vorzeitige Beendigung durch das Betriebssystem verursacht. Der Code, den Sie gerade gepostet haben, tut genau das. Dieser Code suggeriert ein [gutes Buch über die Sprache C] (https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list?s=1|3.4128) ist eine solide Investition. – WhozCraig

Antwort

1

Wenn Sie printf aufrufen mit %s es bedeutet, dass printf an der angegebenen Adresse Druck beginnen und enden, wenn ein Nullabschluss erreicht ist, weil Sie printf ein char und kein pointer zu einem char geben, versucht er, die verwenden Wert in a geschrieben, um mit dem Drucken zu beginnen.

a ist ein char einen Raum von einem Byte Aufnahme während eine Adresse 8 Bytes in einem 64-Bit-System ist, so dass im Grunde printf den Wert in 'a' übernimmt und die den nächsten 7 Bytes (die 'random sind garbage ') und versucht, sie als Adresse zu verwenden, um den Druckvorgang zu stoppen.

deshalb funktioniert es manchmal wie Sie gesagt, manchmal sind diese zufälligen Adressen in Ordnung, mit dem Drucken beginnen, aber manchmal sind sie Adressen, auf die Sie nicht berechtigt sind, wie Bereiche des Arbeitsspeichers von dem Betriebssystem oder Kernel zugreifen.

das Problem, das Sie a ein char * und nicht ein char, machen müssen lösen und es mit einem String zuweisen.

-1

Code ändern zu

#include<stdio.h> 
int main() 
{ 
    char a; 
    a='S'; 
    printf("%c",a); 
    return 0; 
} 

und es wird gut funktionieren.

+0

Obwohl Ihr Code eine Compiler-Warnung behebt, wird der Code nicht behoben. – dvhh

+0

Die doppelten Anführungszeichen sind bis jetzt nicht aufgefallen. Auch das wurde behoben. –

+0

aber sind Sie sicher, dass das der beabsichtigte Code war? vielleicht @ gayantha-akalanka wollte eine string und nicht nur ein einzelnes zeichen drucken. – dvhh