2016-10-05 3 views
0

Ich möchte ein Programm erstellen, mit dem Namen einfügen und ausdrucken. Aber der Programmabsturz, wann immer es anfängt.C-Programm mit Array char * crash

Das ist mein Hauptklasse:

void main(int argc, char *argv[]) { 
    int* n = (int*) malloc(sizeof(int)); 
    char listStudent[100][31]; 
    char* name = (char*) malloc(31); 
    int id; 
    *n = 0; 
    addStudent("John ABC", listStudent, n); 
    addStudent("David Davinci", listStudent, n); 
} 

Und einige Funktion

void addStudent(char name[31], char listName[][31], int *pn) { 
    int id; 
    id = findName(name, listName, *pn); 
    if(id < 0) { 
     addName(name, listName, *pn); 
     printf("%s has been added", name); 
    } else 
     printf("The student was exist\n"); 
} 


int findName(char name[31], char listName[][31], int n) { 
    int found = FALSE; 
    int i, id; 
    id = -1; 
    for(i = 0; i < n && (!found); i++) 
     if(stricmp(listName[i], name) == 0) { 
      found = TRUE; 
      id = i; 
     } 

    return id; 
} 

void addName(char str[31], char listName[][31], int* pn) { 
    if(*pn > 100) 
     printf("List is full !!"); 
    else 
     strcpy(listName[(*pn)++],str); 
} 

Danke für Ihre Hilfe vorantreiben rufen !!

+2

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

Antwort

0

Es stürzt nicht ab. Nun liegt es an Ihnen, damit es funktioniert, wie Sie es wünschen.

void addStudent(char* name, char listName[][31], int* n) { 
    int id; 
    // printf("%s", name); 
    id = findName(name, listName, n); 
    if(id < 0) { 
     addName(name, listName, n); 
     printf("%s has been added\n", name); 
    } else 
     printf("The student already exists\n"); 
} 


int findName(char* name, char listName[][31], int n) { 
    int found = 0; 
    int i, id; 
    id = -1; 
    for(i = 0; i<100 && &(n) < 100 &&(!found); i++) 
     if(strcmp(listName[i], name) == 0) { 
      found = 1; 
      id = i; 
     } 
    return id; 
} 

void addName(char str[31], char listName[][31], int* pn) { 
    if(pn > 100) 
     printf("List is full !!\n"); 
    else 
     strcpy(listName[(*pn)++],str); 
} 


void main(int argc, char *argv[]) { 
    int n = 0; 
    char listStudent[100][31]; 
    int id; 
    addStudent("John ABC", listStudent, &(n)); 
    addStudent("David Davinci", listStudent, &(n)); 
} 
+0

Danke für Ihre Hilfe, ich habe ein Problem festgestellt. – th0k1a1

+0

Welches Problem? Frage, ob du es nicht verstehst und ich werde die kleinen Veränderungen erklären. Ich dachte, sie wären offensichtlich. –

+0

Das ist meine Schuld. In addStudent-Funktion. Ich rufe addName (name, listName, * pn); Dieser Parameter * pn ist Ursache. – th0k1a1