gpt4 book ai didi

c - 在 ubuntu 上使用 C 进行段错误核心转储

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:03 25 4
gpt4 key购买 nike

我用普通 C 编写的一些代码行有问题。它在 Windows 上运行良好,但在 ubuntu 上出现错误,提示“Segmentation Fault (core dumped)”。我已经搜索了答案,但可能导致该错误的问题太多。

char line[80];
char sett[50][80];
int index=0;
static const char filename[] = "squid.conf";
FILE *file = fopen ( filename, "r" );

while ( fgets ( line, sizeof line, file ) != NULL )
{
strcpy(sett[index],line);
index++;
}

我只想将整个文件逐行写入二维数组。如果我引用 //strcpy(sett[index],line); 程序运行良好,没有错误。

最佳答案

正如其他人所说,也许你的 squid.conf 有超过 50 行,(我的 squid.conf 有 4948 行)

您可以在 malloc(nlines * 80) 之前计算行数,也可以使用链表:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct sett {
char value[80];
struct sett *next;
} sett;

int main(void)
{
char line[80];
sett *curr, *first = NULL, *prev = NULL;
static const char filename[] = "squid.conf";
FILE *file = fopen(filename, "r");

while (fgets(line, sizeof line, file) != NULL) {
curr = malloc(sizeof(sett));
if (curr == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
if (prev) {
prev->next = curr;
} else {
first = curr;
}
strcpy(curr->value, line);
curr->next = NULL;
prev = curr;
}
fclose(file);
curr = first;
while (curr) {
printf("%s", curr->value);
prev = curr;
curr = curr->next;
free(prev);
}
return 0;
}

关于c - 在 ubuntu 上使用 C 进行段错误核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649077/

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