c언어 파일입출력 질문 진짜 모르겠어서 올려봅니다
South Korea's intelligence agency said on Thursday that the country has joined a cyber defense group under the North Atlantic Treaty Organization (NATO), becoming its first Asian member country.
The National Intelligence Service (NIS) said that South Korea, along with Canada and Luxembourg, have been admitted into the NATO Cooperative Cyber Defense Centre of Excellence (CCDCOE), a think-tank based in Tallinn, Estonia, that supports member nations and NATO with interdisciplinary cyber defense research, training, and exercises.
The think-tank was established in 2008 by NATO members, on the initiative of Estonia, in response to the country suffering crippling cyberattacks allegedly committed by Russia.
이게 txt파일에 들어가는 내용이고
이 txt파일 이름이 input인데 이때
이 input..txt 파일을 열고 한줄씩 단위로 읽어서 다음의 포이터 배열에 각 요소로 기록
char * input[10];
input 배열의 각 요소는 동적 메모리 할당받는 함수를 활용하여 동적으로 할당 받는다
각줄의 문자열을 위하여 동적으로 할당 받는 배열의 크기는 문자 개수로 400개면 충분하다
문자을을 담는 배열을 가리키는 포인터는 char *line을 활용
FILE * FP;
fp= 파일 여는 함수("input.txt","r");
성공적으로 파일이 열린 경우
{
파일 내의 각 줄의 문자열에 대해서
{
line = 동적 메모리 할당 함수(400 *sizeof(char));
동적 메모리 할당이 성공적으로 된 경우
{
line = 파일 내의 한 문자얼을 읽는 함수(fp);
input 문자열 배열에 방금 읽은 line 문자열을 저장함
}
}
//파일 내의 모든 문자열 입력이 완료되면
input 문자열 배열의 문자열들을 화면에 표출함
input 문자열 배열의 문자열에 할당된 동적 메모리를 반환함.
}
이런 식으로 만들어 볼려고 하는데
#include
#include
int main() {
const int max = 400;
char line[max];
char *input[10];
FILE *in = fopen("input.txt", "r");
while (!feof(in)) {
input = fgets(line, max, in);
printf("%s", input);
}
fclose(in);
}
이렇게해서 짜보고는 있는데
뭘 추가하고 어디를 고쳐야 할까요? 부탁드립니다
요즘 과제 시즌인가.. 과제성 질문이 많이 올라오네요
요즘 과제 시즌인가.. 과제성 질문이 많이 올라오네요
님께서 남겨 주신 pseudo code 를 대충 code 화 해 보겠습니다.
파일을 여는 함수는 open, fopen 를 이용할 수 있으며, 보통은 fopen 을 사용합니다. fopen 의 man page를 보면
성공시에 FILE 포인트를, 실패시에 NULL 을 반환하고 errno 에 에러를 지시하는 코드를 셋팅한다고 되어 있습니다. 그러므로.. 이 부분의 코드는 다음과 같이 작성할 수 있습니다.
line 한줄을 가져오는 함수로는 fgets 를 이용하면 되는데, 역시 fgets man page 를 보면
stream 파일 스트림에서 EOF 나 newline 까지 읽은 다음 *s 에 size 만큼 저장을 하고, 성공적으로 저장을 하면 s 의 포인트 주소를 반환한다고 되어 있습니다. 실패하면 역시 NULL 을 반환하고 errno 를 셋팅 하네요. fgets 의 반환값을 line 변수에 받으려면 s 도 역시 필요하게 됩니다. 일단 문자열을 s 에 받을 것이므로.. s 에 동적 할당을 해 줍니다.
한줄을 읽어 왔으니, 다음은 input 배열에 저장을 하고, input 배열에 저장한 문자열을 출력 합니다.
loop 를 다 돌고 나면.. 이제 사용한 memory 를 반환해 줘야 합니다.
P.S.
풀어 쓰느라 검증도 제대로 되지 않았으니.. 오류가 있을 수도 있습니다. 오류가 있으면 스스로 검색해서 완성해 보세요.
이 정도면 전체 코드 90% 정도는 만들어 드린것 같기는 합니다.
댓글 달기