Run-Time Check Failure #2 - Stack around the variable wurde beschädigt
Hab ich schon gesehen, die Fragen hier bei stackoverflow aber keiner davon hat mein problem gelöst...
habe ich den code in C:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char str[] = "";
scanf("%[^\n]", str);
printf("Você digitou: %s\n", str);
system("pause");
}
Wenn ich das Programm starte, hätte ich den Fehler:
Run-Time Check Failure #2 - Stack around the variable 'str' beschädigt war.
nun, ich weiß wirklich nicht, was mache ich falsch... 🙁
InformationsquelleAutor wikarus | 2012-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array
str
kann nur eine einzigechar
angesichts seiner Initialisierung. Der Aufrufscanf()
werden überschreiben die Grenzen derstr
verursacht Undefiniertes Verhalten, in diesem Fall korrumpiert den stack. Sie müssen entscheiden, wie groß derstr
array sein soll, und begrenzen Sie die Anzahl von Zeichen Lesen um zu verhindern, Pufferüberlauf.Verwenden
scanf()
geben Sie die maximale Anzahl von Zeichen zu Lesen:Könnten Sie auch
fgets()
, sondern müssten zu entfernen die neue-Zeile-Zeichen danach.InformationsquelleAutor hmjd
Sollten Sie nicht überschreiben Sie eine Konstante mit Benutzereingaben. Ersetzen
char str[] = ""
mitchar * str = malloc(<enough bytes for any possible input)
oder sogar lernen, über safer-APIs.InformationsquelleAutor bmargulies
Sind Sie nur die Zuweisung einer byte zum speichern der Eingabe. Die Linie
Weist null-bytes für den string-Inhalt und ein byte für seine null-terminator. Stattdessen machen Sie etwas wie
Oder was auch immer die maximale Eingabelänge wird.
InformationsquelleAutor Keith Randall
Diese Antwort ist für jeden, der kam, um C++ von Java/C# oder anderen modernen objektorientierten Sprache.
Für mich dieses Problem geschah aus folgendem Grund:
Erstellte ich meine eigenen C++ - Klasse.
MyClass.h
MyClass.cpp
Meine intuition war, dass
propA
undpropB
einfach auf die privaten Eigenschaften, unsichtbar aus dem code außerhalb dieser Klasse.Das problem war, dass ich noch nicht
propA
undpropB
imMyClass.h
.Compiler weiß nicht, wie viel Speicher Sie zuweisen soll, wenn
MyClass
ist immer instanziiert von Anrufern.Habe ich einfach Hinzugefügt, die Eigenschaften der header -
MyClass.h
:MyClass.h (fest)
InformationsquelleAutor ancajic