C언어에서 파일 쓰기가 안됩니다. ㅜ
글쓴이: 갈길이멀다... / 작성시간: 토, 2011/07/09 - 3:00오후
#include
#include
int main(void){
FILE *fp_t, *fp_b;
char c;
int i=0;
if((fp_t=fopen("test.txt", "rt")) == NULL){
printf("file open error\n");
}
if(fp_b=fopen("test.bin","wb")==NULL){
printf("file open error\n");
}
while(1){
c=fgetc(fp_t);
if(c==EOF) break;
printf("check %c\n",c);
fwrite(&c,sizeof(char),1,fp_b);
}
fcloseall();
return 0;
}
텍스트를 바이너리로 변화해야되서 코드를 짰는데
딱히 에러날 구문이 없는데
fwrite에서 세그멘테이션 오류가 발생합니다.
바이너리 모드라서 그런가보다 생각해서
텍스트 모드의 fputc, fputs 역시 오류가 발생하는데
이 간단한 코드 에러를 도저히 모르겠습니다. ㅜ
Forums:
fp_b에 괄호()를 빼먹으셨네요
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
이런 말도 안되는 실수에 엄청나게 시간 낭비했네요
이런 말도 안되는 실수에
엄청나게 시간 낭비했네요 ㅜㅜ
정말 감사합니다.
그런데 바이너리로 변환했는데도
그냥 에디터로 읽히네요 ;;
변환이 되면 원래 깨져서 나오지 않나요?
괄호를 빼먹은 것이 문제였으면 컴파일에러가 나야지
괄호를 빼먹은 것이 문제였으면 컴파일에러가 나야지 세그멘테이션 폴트가 나는 것이 이상하군요.
여하튼, 이 코드는 바이너리로 변화하는 코드가 아닙니다.
문자 하나씩 읽어서 그대로 저장할 뿐인데 달라질 것이 하나도 없지요.
출력된 파일 내용을 입력 파일과 비교해보세요. 똑같을 겁니다.
보통 "바이너리로 변환한다"고 하면, 예를 들어
텍스트로 12345\t1110 라고 되어 있는 것을 (\t 는 구분자 용도로 썼습니다.)
12345 를 타나내는 int 하나(4byte)를 쓰고,
1110을 나타내는 int 하나(4byte)를 쓰는 식으로 변환하는 것이지요.
그러면 원래 10byte (문자 10개)로 표현되었던 내용이 8byte 로 바뀌겠지요.
물론 텍스트 에디터로 읽으면 이상한 문자들이 나올테구요.
연산자 우선순위를 다시 공부하셔야 할 듯. 문법상으로
연산자 우선순위를 다시 공부하셔야 할 듯.
문법상으로 전혀 하자 없으니까 컴파일 에러가 안나왔겠죠.
괄호를 한쪽만 빼먹은게 아니라 양쪽 다 빼먹은거라고
괄호를 한쪽만 빼먹은게 아니라 양쪽 다 빼먹은거라고 쓰면 간단한걸
꼭 이렇게 다른사람 바보만들어야 속이 시원하냐?
댓글 달기