Xcode中的分段错误,调试器无法帮助我
我一直在发疯,想弄清楚哪里做错了。我承认我在C语言方面缺乏经验,但我不知道哪里不对。我访问/使用结构的方式是否不正确 编辑:我一直在调试器中获得EXC\u BAD\u访问权限Xcode中的分段错误,调试器无法帮助我,c,xcode,segmentation-fault,C,Xcode,Segmentation Fault,我一直在发疯,想弄清楚哪里做错了。我承认我在C语言方面缺乏经验,但我不知道哪里不对。我访问/使用结构的方式是否不正确 编辑:我一直在调试器中获得EXC\u BAD\u访问权限 #include <stdio.h> #include <string.h> #define MAX_STRING 20 #define MAX_PLYR 16 typedef struct { char pname[MAX_STRING]; int runs;
#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);
}
您声明团队_数据,但不分配它;因此,它指向随机内存,数组的虚拟内容也是如此。您需要实际创建数组,比如
团队*团队数据[MAX\u PLYR]=团队**mallocMAX\u PLYR*大小fteam\u t* 使用结构,而不是指针,或者如果坚持使用指针,则为这些结构分配空间
Team_t team_data[MAX_PLYR];
fgets(team_data[i].pname, MAX_STRING, inp)
当你写作时
Team_t *team_data[MAX_PLYR];
您没有为实际的团队记录分配任何内存,而是设置指向记录的指针数组
如果你愿意写
Team_t team_data[MAX_PLYR];
你会分配记录的。当您想要复制到team_数据数组中时,您可以改为编写
strcpy( team_data[i].name, name );
确保您检查了fopen的返回状态,文件并不总是成功打开为什么人们总是将选项卡与空格混合-这使得重新格式化和理解编辑器是否具有错误的间距非常困难。for循环中的while循环将导致问题。要么像for循环那样从文件中读取固定数量的项,要么像while循环那样读取所有项直到文件结束,但尝试将它们组合起来将无法正常工作。尤其不是,如果有一个;阻止while循环的正文。进行了所有这些编辑,没有任何更改错误我应该从团队_数据中删除*。很抱歉我不理解,但我对CYes很陌生,正如其他几张海报所建议的那样,您可以去掉指针并将其声明为团队数据[MAX_PLYR]。这将更改用于访问元素的语法:通常使用。我已经按照您的建议分配了记录,而不是->。错误没有改变。