C언어 프롬프트 사용 질문드립니다.

글쓴이: 익명 사용자 / 작성시간: 수, 2019/04/03 - 9:23오후
Visual Studio 2017 사용하고 있습니다.
프롬포트에서 exe파일을 실행해 메모장 내용을 읽는 프로그램 이구요,
프롬포트에서 해당 exe파일 경로 지정 후 text.txt파일을 폴더에 직접 생성한 뒤
프로그램.exe text.txt 실행하면 메모장을 읽어야 하는데 읽지를 못하네요...
아시는분 답변해주시면 정말 감사하겠습니다.
int main(int argc, char*argv[])
{
int ch;
FILE *fp;
unsigned long count = 0;
if (argc != 2)
{
printf("사용법 : %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
if (fp = fopen(argv[1], "r") == NULL)
{
printf("%p %p\n", fp, NULL);
printf("%s 파일을 열 수 없습니다.\n", argv[1]);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch, stdout);
count++;
}
fclose(fp);
printf("%s 파일에는 %ld개의 문자가 들어있습니다.\n", argv[1], count);
return 0;
}
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 2.93 KB |
Forums:
fp 가 1로 나오는 이유는 연산자 우선순위
fp 가 1로 나오는 이유는 연산자 우선순위 때문입니다.
따라서 이 코드는 파일이 제대로 열렸다 해도 그 뒤에 getc()에서 죽을 겁니다.
근데 fp가 1이어서 if 블록 안으로 들어갔다는 얘기는 fopen()이 NULL을 반환했다는 얘기니 파일이 제대로 열리지 않은 것도 맞네요.
저 디렉토리에 test.txt 파일이 있는 건 확실한가요? 명령 프롬프트 창에서 dir 해서 뭐가 나오는지 보세요. 만일 메모장으로 텍스트 파일을 만드셨다면, 그 파일 이름이 test.txt 가 아니라 test.txt.txt 일 가능성도 있습니다.
test.txt 가 있는데도 오픈이 실패하고 있다면, perror 함수를 넣어보세요.
그러면 무슨 이유로 실패했는지 메시지가 나올 겁니다.
좋은 하루 되세요!
아... 정말 감사합니다 ㅠㅠ 괄호 쓰는것도 까먹고
아... 정말 감사합니다 ㅠㅠ 괄호 쓰는것도 까먹고 헤맸네요... 해결됐습니다.
그리고 perror함수 알려주셔서 감사합니다.
댓글 달기