我在使用简单的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);
,程序运行正常,没有错误。
答案 0 :(得分:1)
正如其他人所说,也许你的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;
}