정보가 줄로 정렬 된 파일이 주어지면 각 줄을 문자열에 저장하는 프로그램을 작성해야합니다. 다음과 같이파일에서 배열로 행 복사 (C)
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
내 코드는 다음과 같습니다
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 70
#define NLine 4
int main()
{
FILE *arq;
char line[MAX];
char *eof;
char name[20];
char *nline[NLine];
int i;
printf("\nGive me the name of the file: ");
fgets(name, 20 , stdin);
arq = fopen(name, "r");
while((eof = fgets(line, MAX, arq))!= NULL)
{
nline[i] = strdup(eof);
i++;
}
printf("\n");
for(i = 0; i < NLine; i++)
printf("%s", nline[i]);
for(i = 0; i < NLine; i++)
free(nline[i]);
fclose(arq);
return 0;
}
내 출력이 세분화 잘못이다; 그러나 arq = fopen(name, "r");
을 arq = fopen("test.txt", "r");
으로 대체하면 프로그램이 완벽하게 실행됩니다. 나는 gdb
실행하고 그것이 잘못된 매개 변수로 문자열 배열로 fopen
를 호출하는 것입니다
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a7ea2b in fgets() from /lib64/libc.so.6
를 반환했습니다, 아니면 프로그램의 잘못을 했습니까?
또한 나는 어떻게 일부를
while((eof = fgets(line, MAX, arq))!= NULL)
{
nline[i] = strdup(eof);
i++;
}
작품을 알고 싶습니다. 방금 question 코드를보고 작동하도록 관리했습니다. 그러나 그 함수가 같은 라인을 읽지 않고 다른 라인을 읽는 방법을 이해하지 못했습니다. 왜냐하면 eof
이 파일에서 읽혀지는 방법에 명백한 변화가 없기 때문입니다.
* "char * eof;는 문자열을위한 공간을 할당하지 않습니다"* - 이전에'strdup'를 사용한 적이 있습니까? – paddy
@Myforwik, 방금'if (! arq) {printf ("파일을 열 수 없습니다"); 반환; }'파일을 열려고 시도한 후, 이제는 출력물이 항상 '파일을 열 수 없습니다'라는 오류 메시지가 표시됩니다. 또한,'malloc (20 * sizeof (char)) '로 각'nline [i]를 시작하고 @paddy가 제안한대로'nline [i]'를'NULL'로 초기화했습니다. –
나는 그것을 제안하지 않았다. – paddy