这是我正在处理的程序的一部分,它正在复制打开的文件,然后将其放入一个数组(file1
)。但是,当我尝试打印file1
的内容时,我遇到了分段错误。
我曾尝试将MAX_MAC_ADD设置为50,将BIG_NUM设置为30000,以便它足以支持来自fgets()
的文件。
我正在打开的文件有4个部分,每个部分用'tab'分开
e.g。 1个1两个1三1four 2one 2two 2three 2four
char file1[MAX_MAC_ADD][BIG_NUM];
int num_MAC = 0;
char *Programe_Name;
int saperate_fields1(char line[])
{
int i = 0;
int f = 0;
while(line[i] != '\0' && line[i] != '\n')
{
int c = 0;
while(line[i] != '\t' && line[i] != '\0' && line[i] != '\n')
{
file1[f][c] = line[i];
++c;
++i;
}
file1[f][c] = '\0';
++f;
if(f == (MAX_MAC_ADD-1))
{
break;
}
++i;
}
return f,i;
}
void read_file1(char filename[])
{
//OPEN FOR READING
FILE *fp = fopen(filename,"r");
if(fp == NULL)
{
printf("%s: cannot open '%s'\n", Programe_Name, filename);
exit(EXIT_FAILURE);
}
char line[BUFSIZ];
while(fgets(line, sizeof line, fp) != NULL)
{
saperate_fields1(line); //SAPERATE INTO FIELDS
num_MAC = num_MAC + 1;
printf("%d times\n", num_MAC);
}
fclose(fp);
printf("line is:\n%s\n", line); //TO CHECK WHERE DO THE PROGRAM STOP READING
printf("file1 is:\n%s\n", file1);
}
答案 0 :(得分:1)
将指向char
s数组的指针传递给格式说明符%s
,该指针需要指向char
的指针。如果要打印char
数组的数组,则需要单独打印元素,例如:
for (int i = 0; i != end; ++i) {
printf("file1[%d]='%s'\n", i, file1[i]);
}