指针,头文件和结构数组

时间:2018-05-02 09:54:07

标签: c arrays eclipse pointers struct

我在C中用3个文件创建了一个项目,main.c在那里我写了一个main:

的main.c

#include <stdlib.h>
#include <stdio.h>

typedef struct{
    char nome[29];
    char cognome[28];
    int et;
}s_persona;

int main(){
    s_persona personaX[5];

    caricamento(&personaX[5]);

    int i;

    for(i=0;i<=5;i++){
        printf("Nome: %s\t Cognome: %s\t Eta': %d\n", personaX[i].nome, personaX[i].cognome, personaX[i].et);
    }

    system("pause");
}

然后是带有原型(struct.h)的头文件

#ifndef STRUCT_H_
#define STRUCT_H_

void caricamento(s_pers perso[5])

#endif /* STRUCT_H_ */

和另一个带有函数的源文件(struct.c):

#include <stdlib.h>
#include <stdio.h>

typedef struct{
    char nome[29];
    char cognome[28];
    int et;
}s_pers;

void caricamento(s_pers* perso[5]){
    int k;

    for(k=0;k<=5;k++){
        printf("Inserisci nome dello studente: ");
        scanf("%s", perso[k]->nome);

        printf("Inserisci cognome dello studente: ");
        scanf("%s", perso[k]->cognome);

        printf("Inserisci l'eta' dello studente: ");
        scanf("%d", &perso[k]->et);
    }
}

好的,我使用的是所有文件。 Eclipse构建项目,没有错误,但是,当我插入第一个字符串时,应用程序停止工作并崩溃。 我尝试创建另一个类似的应用程序,但没有使用结构数组,它完美地工作... 我怎么解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

根本不使用您的标题。最好在标题中定义结构并在源文件中包含标题(如上面的注释中所述)。

#ifndef STRUCT_H_
#define STRUCT_H_

typedef struct{
    char nome[29];
    char cognome[28];
    int et;
} s_pers;

void caricamento(s_pers *perso)

#endif /* STRUCT_H_ */

然后在你的main.c include标题中以及评论中提到的personaX传递。否则你会传递第六个元素的地址,甚至不存在!由于数组从0开始,您可能只会迭代到k < 5

#include <stdlib.h>
#include <stdio.h>
#include <struct.h>    /* include your header! */

/* 
  Structure already defined in header, 
  no need to define it here! 
 */

int main(){
    s_pers personaX[5];

    caricamento(personaX);

    int i;
    for(i=0;i<5;i++){
        printf("Nome: %s\t Cognome: %s\t Eta': %d\n", 
            personaX[i].nome, personaX[i].cognome, personaX[i].et);
    }

    system("pause");
}

在你的struct.c中确保包含你的标题,并确保你的函数与头文件中的函数声明匹配!再次确保在5处停止,因此请使用k < 5

#include <stdlib.h>
#include <stdio.h>
#include <struct.h>    /* include your header! */

void caricamento(s_pers* perso){
    int k;

    for(k=0;k<5;k++){
        printf("Inserisci nome dello studente: ");
        scanf("%s", perso[k].nome);

        printf("Inserisci cognome dello studente: ");
        scanf("%s", perso[k].cognome);

        printf("Inserisci l'eta' dello studente: ");
        scanf("%d", &perso[k].et);
    }
}