我一直在疯狂地想弄清楚做错了什么。我承认我在C方面缺乏经验,但我不知道出了什么问题。我访问/使用struct的方式是不正确的?
编辑:我一直在调试器中获得EXC_BAD_ACCESS。
#include <stdio.h>
#include <string.h>
#define MAX_STRING 20
#define MAX_PLYR 16
typedef struct {
char pname[MAX_STRING];
int runs;
char *s;
} Team_t;
int
main(void)
{
Team_t *team_data[MAX_PLYR];
int i;
char *p;
char name[MAX_STRING];
FILE *inp;
inp = fopen("teamnames.rtf", "r");
for (i = 0; i < MAX_PLYR;) {
while ((fgets(name, MAX_STRING, inp) != NULL));
printf("Name(i): %s\n", name);
strcpy(team_data[i]->pname, name);
i++;
}
fclose(inp);
return(0);
}
编辑:这是改变的,仍然会出现分段错误
#include <stdio.h>
#include <string.h>
#define MAX_STRING 20
#define MAX_PLYR 16
typedef struct {
char pname[MAX_STRING];
int runs;
char s;
} Team_t;
int
main(void)
{
Team_t team_data[MAX_PLYR];
char name[MAX_STRING];
int i;
FILE *inp;
inp = fopen("teamnames.rtf", "r");
for (i = 0; i < MAX_PLYR; i++) {
((fgets(name, MAX_STRING, inp)));
if (feof(inp)) {
printf("End of stream\n");
i = MAX_PLYR;
}
else {
if (ferror(inp)) {
printf("Error reading from file\n");
}
printf("Name(i): %s\n", name);
strcpy(team_data[i].pname, name);
}
}
fclose(inp);
return(0);
}
答案 0 :(得分:0)
您声明team_data
,但您没有分配它;因此它指向随机存储器,就像数组的虚构内容一样。你需要实际创建数组,比如
Team_t * team_data [MAX_PLYR] =(Team_t **)malloc(MAX_PLYR * sizeof(Team_t *));
答案 1 :(得分:0)
使用结构,而不是指针(或者如果你坚持使用指针为这些结构分配空间)
Team_t team_data[MAX_PLYR];
fgets(team_data[i].pname, MAX_STRING, inp)
答案 2 :(得分:0)
当你写
Team_t *team_data[MAX_PLYR];
你没有为实际的Team_t记录分配任何内存,而是设置一个指向记录的指针数组。
相反,你会写
Team_t team_data[MAX_PLYR];
你会分配记录。当您想要复制到team_data数组时,请改为编写
strcpy( team_data[i].name, name );