2016-06-22 15 views
-1

Ich arbeite aus einem Lehrbuch lernen c. Eine der Übungen ist das Kopieren des Codes aus dem Buch, um mit scanf zu demonstrieren. Es wird Benutzereingabe für wie oft etwas gedruckt werden soll. Mit einer for-Schleife zum Ausdrucken der Zeichenfolge scheinen die letzten Zeichen der Zeichenfolge durcheinandergewürfelt zu sein. Bitte sehen Sie unten und jede Hilfe wäre willkommen. Bisher habe ich versucht, das '\ n' zu entfernen, um zu sehen, ob es das Problem verursacht. Ich habe die Zeichenfolge vor der Schleife ausgedruckt, um zu sehen, ob es ein Fehler mit der Zeichenfolge ist, aber es scheint außerhalb der Schleife gut zu funktionieren. Code unten:string druckt nicht richtig in for loop aber druck OK vor

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char message[10]; 
    int count, i; 

    strcpy(message, "Hello, World!"); 

    printf("Repeat how many times? "); 
    scanf("%d", &count); 

    printf("%s\n", message); 

    for(i = 0; i < count; ++i) 
    { 
     printf("%3d - %s\n", i, message); 
    } 
    return 0; 
} 

Ergebnisse:

Repeat how many times? 3 
Hello, World! 
    0 - Hello, Wor 
    1 - Hello, Wor 
    2 - Hello, Wor 

Vielen Dank im Voraus.

+3

Out-of-bounds schreiben, nicht definiertes Verhalten. – EOF

+2

Sie schreiben 14 Zeichen (13 plus Nullbyte) in ein Array, das nur 10 enthält. Sie beschädigen den Stapel und alles danach ist ein undefiniertes Verhalten. Achte auf mehr Aufmerksamkeit! –

+0

Es ist nicht wirklich gültig, * undefined Verhalten zu erklären *, aber es kann zufriedenstellend sein, wenn es passt. * Möglicherweise * wenn du anfingst, 'i' zu benutzen, korrumpierte es die Zeichenkette, die wegen unzureichender Länge in' i' übergelaufen war. –

Antwort

0

Willkommen bei StackOverflow. Der Name der Website ist die Antwort auf Ihre Frage. Sie versuchen, 14 Zeichen in einer Zeichenfolge zu speichern, die bis zu 10 enthalten kann. Alles was danach passiert, ist undefiniertes Verhalten.

Was ist undefiniertes Verhalten?

Nicht definiertes Verhalten ist nicht definiert. Es kann dein Programm zum Absturz bringen. Es kann nichts tun. Es kann genau das tun, was Sie erwartet haben. Es kann nasale Dämonen beschwören. Es kann alle Ihre Dateien löschen. Der Compiler ist kostenlos zu emittieren, was auch immer es gefällt (oder gar nicht), wenn es undefined Verhalten trifft.

Jede Instanz nicht definiertes Verhalten bewirkt, dass das gesamte Programm nicht definiert sein - nicht nur die Operation, die nicht definiert ist, so dass der Compiler kann tun, was es zu jedem Teil des Programms will. Einschließlich Zeit Reisen.

Read this

+0

Großartig. Danke für die informative Antwort Mirakurun! – rayzor

+0

Gern geschehen. Wenn Sie mit der Antwort zufrieden sind, können Sie sie akzeptieren, damit die Frage für die zukünftige Referenz beantwortet wird. – Mirakurun