gpt4 book ai didi

c - C 中的字符串数组段错误

转载 作者:行者123 更新时间:2023-11-30 16:49:12 26 4
gpt4 key购买 nike

我正在尝试创建一个字符串数组并将字符串传递给该数组。

struct node {
int vertex_no;

};

int main() {
char city1[100], city2[100], buffer[999];
int distance;
FILE *fp;
fp = fopen("cities.txt", "r+");
if(fp == NULL)
perror("Error");
//Change - characters with space
while(1) {
char ch = fgetc(fp);
if(ch == '-') {
fseek(fp, ftell(fp)-1, SEEK_SET);
fputc(' ', fp);
}

if(ch == EOF)
break;
}

//Get to beginning of the file
fseek(fp, 0, SEEK_SET);

//Pass first line
fgets(buffer, sizeof(buffer), fp);

int i, j, v = 0;
char cities[100][100];
for(i = 0; i < 100; i++)
for(j = 0; j < 100; j++)
cities[i][j] = '\n';
int vertices = 0;
int add = 1;
//Find how many vertices we have
while(fscanf(fp, "%s %s %d", city1, city2, &distance) == 3) {
if(cities[0][0] == '\n') {
strcpy(cities[0], city1);
strcpy(cities[1], city2);
v = 2;
}
for(i = 0; cities[i][0] != '\n'; i++) {
//Search city1 inside cities array
if( strcmp(cities[i], city1) == 0 ) {
add = 0;
break;
}
//If not found add it to array
if(add) {
strcpy(cities[v], city1);
v++;
}
//Same search for city2
add = 1;
if( strcmp(cities[i], city2) == 0 ) {
add = 0;
break;
}
//If not found add it to array
if(add) {
strcpy(cities[v], city2);
v++;
}
}
}

for(i=0;cities[i][0] != '\n';i++)
printf("City no.%d = %s\n", i, cities[i]);
printf("Last city1, city2 and distance: %s, %s, %d", city1, city2, distance);
return 0;
}

结果我得到

segmentation fault(core dumped)

当我尝试做这样的事情时

char *test = NULL;
strcpy(test, "hello");
return 0;

我再次遇到相同的段错误。虽然像这样分配空间时:

char *test = (char *) malloc(100);

没问题。但是当我这样做时:

char test[100];

也没有问题。这就是为什么我不明白出现段错误的原因,即使我使用了

char strings[100][100];

而不是

char *strings[100];

最佳答案

下面分配一个指针并将该指针设置为指向一个包含 100 个字符的数组。 IE。没有地方可以插入 100 个城市字符串。

char *test = NULL;
strcpy(test, "hello");
return 0;

....
char *test = (char *) malloc(100);
....

下面声明了一个 100 字节的数组,没有空间容纳 100 个城市字符串

char test[100];

下面声明一个由 100 个字符数组组成的数组,其中每个数组长度为 100 字节

char strings[100][100];

下面声明了一个包含 100 个指向 char 的指针的数组,而不是 100 个字符串。因此,您需要为每个城市字符串“malloc”空间,并将该指针插入到数组中适当的偏移量中。

char *strings[100];

关于c - C 中的字符串数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com