Ich verstehe, dass in C, Arrays, die eine Länge bei der Deklaration gegeben werden können. Ich möchte wissen, ob diese Längenangaben einfach für andere Programmierer sind, um die Verwendung von zu sehen und zu verstehen, oder ob der Compiler dazu gebracht werden kann, den Code zu schützen, indem er das Lesen von mehr als der Pufferlänge von Zeichen verbietet. Wenn ich eine Zeichenfolge einlese, wird sie einfach weiter ausgeführt und beginnt Daten zu überschreiben, die in Variablen gespeichert sind, die nach dem Puffer deklariert sind, in den ich einlesen möchte. Gibt es sichere Möglichkeiten, Daten einzulesen?Wie behandelt C Pufferüberläufe?
char arr[5];
char buff[5] = "cat";
printf("The buffer holds: %s\n", buff);
printf("Input a word to be held in \"arr\": ");
scanf("%s", arr);
printf("The array holds: %s\n", arr);
printf("The buffer holds: %s\n", buff);
printf("%c\n", arr[9]);
Wenn die Zeichenfolge in arr lesen lang genug ist, „cat“ überschrieben ist, und keines der Kompilierung Flaggen scheinen etwas zu tun (ich kompilieren mit -Wextra -Wall Werror -std = c99) Der einzige Was sich beklagt, ist Valgrind. Wie schreibe ich sicheren Array-Code in C?
Sie handeln diszipliniert. Der "C" -Standard gibt an, dass Compiler-Anbieter nicht verpflichtet sind, Sie zu verteidigen. Außerhalb der Grenzen schreiben ist ein undefiniertes Verhalten. – StoryTeller
haben Sie versucht, '-O2' hinzuzufügen? –
lm gt fy ... 'safe scanf' –