2016-10-05 5 views
0

名前を挿入してプリントアウトできるプログラムをビルドしたいと思います。しかし、プログラムが始動するたびにクラッシュします。Cプログラムを使用して配列char *クラッシュ

これは私のメインクラスです:

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); 
} 

おかげであなたの助けを事前に呼び出す

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); 
} 

そして、いくつかの機能!

+2

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

答えて

0

クラッシュしていません。 あなたの望みどおりに動作させることができます。

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

ご協力ありがとうございます、私は問題を検出しました。 – th0k1a1

+0

どのような問題がありますか?あなたが理解していないか尋ね、私は小さな変化を説明します。私は彼らが明らかだと思った。 –

+0

これは私のせいです。 addStudent関数で。 addName(name、listName、* pn)を呼び出します。この* pnパラメータは原因です。 – th0k1a1

関連する問題