2017-02-14 2 views
0

Ich mache ein paar Übungen für meine Universität Kurs auf C und ich habe den folgenden Code, der mit Fehler Segmentierung Fehler (Kern abgeladen), nachdem der Benutzer die Wahl (1 oder 2) eingegeben hat. Ich weiß nicht, ob es ein Problem ist, dass ich ubuntu 16.04 benutze und ich kompiliere meine Quellcode-Dateien mit make Befehl. Oh und bitte empfehlen nicht die eingebaute in c-Funktion strcpy zu verwenden, da diese Übung soll „uns lehren, wie unsere eigene String-Kopie zu machen.Fehler Segmentierung Fehler (Core Dumped)

Also, was mache ich falsch?

#include <stdio.h> 
#define SIZE 1000 

char mystrcpy(char *dest,char *src); 

main(){ 

    char str1[SIZE]; 
    char str2[SIZE]; 
    char str3[SIZE]; 
    int choice; 



    printf("Give first string: "); 
    gets(str1); 
    printf("Give second string: "); 
    gets(str2); 
    printf("Choose one of two strings (1 h 2): "); 
    scanf("%d",&choice); 

    if (choice==1) 
     mystrcpy(str3,str1); 
    else (choice==2) 
     mystrcpy(str3,str2); 

    printf("\nFirst string is %s\n",str1); 
    printf("\Second string is %s\n",str2); 
    printf("\nThrid string is %s\n",str3); 

} 


char mystrcpy(char *dest,char *src){ 
    int i; 

    while(1) 
    { 

     dest[i] = src[i]; 
     if (src[i] == '\0') 
      break; 

     i++; 
    } 

    return dest; 
} 
+3

Kompilieren Sie alle Warnungen und Debug-Informationen ('gcc -Wall -Wextra -g'). Verbessere deinen Code, um keine Warnungen zu erhalten. Dann ** benutze den Debugger ** ('gdb') –

+2

^^^ Was Basile gesagt hat. Das wird Ihnen auch eine Warnung geben, dass "else (choice == 2)" überhaupt keinen Sinn ergibt. (Obwohl dies nicht die Ursache für den Fehler ist.) –

+0

danke! Das war's! Ich beobachtete dies als Teil eines Tutorials. Der Typ initialisierte nie ich..sann arbeitete an ihm! Was auch immer! Danke noch einmal! –

Antwort

2

Sie nicht i initialisiert wird, so dass es auf einen unbestimmten Wert beginnt, daher der segfault.

Beachten Sie, dass die Hardwareunterstützung ermöglicht In diesem einfachen Fall hätte ngs dieses Problem sofort gezeigt; In komplizierteren Szenarien hätte die Verwendung eines Debuggers gezeigt, dass der Wert i zum Zeitpunkt des Absturzes völlig unsinnig gewesen wäre.

4

i wird nie initialisiert. (30 Zeichen benötigen ....)

Verwandte Themen