#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
试图将字段放入我的结构中,但在我将它们插入时出现分段错误
typedef struct country {
char code_name[3];
char name[44];
int population;
float life_expect;
}country[244];
country *data;
int main(void) {
char c;
char *ptr;
int i;
int temp;
char buf[512];
char *token;
FILE *fptr;
fptr = fopen("AllCountries.dat", "r");
在这里,我称之为strcpy(data[i]->code_name, token)
我得到了一个细分。 这是为什么呢?我做错了什么?
do {
if (fgets(buf, 512 , fptr)){
//printf("%sn",buf);
token = strtok(buf,",");
while (token != NULL){
token = strtok(NULL, ",");
if (temp == 0){
strcpy(data[i]->code_name, token);
printf("%s, ",token);
} temp = temp + 1;
//printf("%s, ",token);
//printf("code_name: %sn", data->code_name);
}
i++;
temp = 0;
}
}while ((feof(fptr)) != EOF);
fclose(fptr);
return 0;
}
该文件
115,DZA,Algeria,Africa,Northern Africa,2381741,1962,31471000,69.7,49982,Al-Jazair/Algérie,Republic,Abdelaziz Bouteflika,35,DZ
146,AGO,Angola,Africa,Central Africa,1246700,1975,12878000,38.3,6648,Angola,Republic,José Eduardo dos Santos,56,AO
94,BEN,Benin,Africa,Western Africa,112622,1960,6097000,50.2,2357,Bénin,Republic,Mathieu Kérékou,187,BJ
129,BWA,Botswana,Africa,Southern Africa,581730,1966,1622000,39.3,4834,Botswana,Republic,Festus G. Mogae,204,BW
193,IOT,British Indian Ocean Territory,Africa,Eastern Africa,78,NULL,0,NULL,0,British Indian Ocean Territory,Dependent Territory of the UK,Elisabeth II,NULL,IO
95,BFA,Burkina Faso,Africa,Western Africa,274000,1960,11937000,46.7,2425,Burkina Faso,Republic,Blaise Compaoré,549,BF
你声明了一个指针变量 data
,但从未将其分配给指向任何内存。您需要在main()
中执行此操作:
data = malloc(sizeof(*data));
但是这里真的不需要指针,只需声明一个普通变量:
country data;
实际上,我建议您不要将数组维度放在类型定义中。您应该声明结构类型,然后声明一个结构数组。
typedef struct country {
char code_name[3];
char name[44];
int population;
float life_expect;
} country;
country data[244];
如果您仍然想使用指针而不是常规变量,它将是:
country *data;
那么在main()
你会做:
data = malloc(244 * sizeof(*data));
您还需要初始化i
:
int i = 0;
和
}while ((feof(fptr)) != EOF);
是错误的。 feof()
在达到 EOF 时返回1
,而不是EOF
。它应该是:
} while (!feof(fptr));
因为目的地 data
是指向 typedef'ed country
的指针,是 NULL。
strcpy()
访问给定的NULL
和段错误。
变量 data
是一个全局变量,在 C 中初始化为 NULL。
ref: 为什么全局变量和静态变量初始化为默认值?, 全局变量在 C 中总是初始化为零吗?