我在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构建项目,没有错误,但是,当我插入第一个字符串时,应用程序停止工作并崩溃。 我尝试创建另一个类似的应用程序,但没有使用结构数组,它完美地工作... 我怎么解决这个问题?
谢谢!
答案 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);
}
}