질문

cwyoo01 Reply 4 years 21 weeks ago
Syllabus 13강의에서 의문점이 생겼는데 #include <stdio.h> #include <stdlib.h> #include <string.h> #define LEN 40 int main(int argc, char* argv[]) { FILE* in, * out; int ch; char name[LEN]; int count = 0; if (argc < 2) { fprintf(stderr, "Usage: %s filename\n", argv[0]); exit(EXIT_FAILURE); } if ((in = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "I couldn't open the file \"%s\"\n", argv[1]); exit(EXIT_FAILURE); } strncpy(name, argv[1], LEN - 5); name[LEN - 5] = '\0'; strcat(name, ".red"); if ((out = fopen(name, "w")) == NULL) { fprintf(stderr, "Can't create output file.\n"); exit(3); } while ((ch = getc(in)) != EOF) if (count++ % 3 == 0) putc(ch, out); if (fclose(in) != 0 || fclose(out) != 0) fprintf(stderr, "Error in closing files\n"); return 0; } 이러한 코드가 있었는데 왜 .red가 확장자명으로 들어가나요? txt파일 안에 .red라는 문자열을 추가해야하는것 아닌가요? 왜 파일의 제목부분에 .red가 가는지 이해가 되지 않습니다.
withcs2 Reply 4 years 21 weeks ago
cmd(명령 프롬프트)에서 "main.c 경로 파일이름" 을 입력하면 파일이름.red라는 파일을 생성하고 그 안에서 %3==0 번째 글자를 적는 코드입니다. txt파일은 현재 읽는 데 사용하고 있으므로 동시에 쓰는 것이 불가능합니다. 그래서 쓰기전용 .red라는 파일을 만들고 그 안에서 작업하게끔 만드셨네요 대부분의 프로그램은 파일 입출력 처리를 할 때는 원본을 직접 건드리지 않고 임시 파일을 만들어서 작업한 다음에 임시파일을 덮어씌우는 방식으로 만들어 안정성을 높입니다. 만들어긴 .red를 txt로 덮어씌우면 의도한 방식대로 만들어질 것 같습니다