c언어에서 jpg파일복사하려고 합니다.
 
  
      글쓴이: 익명 사용자 / 작성시간: 수, 2019/05/08 - 2:22오전    
  
  FILE *rfile = fopen("file.JPG","rb");
이 코드로 파일을 읽은 뒤
while(!feof(rfile))
{
 A = fgets(strtemp,sizeof(strtmpe)) // 파일 내용을 받아서 A에 저장
 strcat(strsum,A) // strsum에 모든 내용을 붙여서 저장
}
이런 코드로 이미지를 읽어서 새로운 파일을 w모드로 오픈해서 strsum내용을복붙했으나
이미지가 만들어지지 않네요.
제가 잘못한 방법이라도 있는 건가요??
Forums: 

fread(), fwrite()를 쓰셔야 겠죠.
fread(), fwrite()를 쓰셔야 겠죠.
...
C 입문서에서 문자열에 대한 부분을 차근차근 잘 읽어보시고요, NUL 문자('\0')가 들어있는 데이터에 대고 strcat을 하면 무슨 일이 일어날지 생각해 보세요.
Jpeg은 바이너리 데이터기 때문에 당연히 NUL 문자가 들어있습니다. (주: NULL과는 전혀 다른 거니까 혼동 주의.)
다음 예제의 결과가 어떻게 될지 생각을 해보시는 것도 좋겠습니다.
#include <stdio.h> #include <string.h> int main(void) { char s[20] = "abc\0!!!"; strcat(s, "hello"); printf("%s\n", s); return 0; }이런 문제 때문에, thread safe 처럼
이런 문제 때문에, thread safe 처럼 binary safe 라는 용어도 있습니다.
보통 binary safe api 들은 function argument 에 length 를 꼭 가지고 있죠.
위에 다른 분들이 말씀해주신 것 외에도...
위에 다른 분들이 말씀해주신 것 외에도...
fgets 는 파일의 끝에서는 NULL을 반환하는데 그게 strcat의 두번째 인자로 들어가면 문제가 될 거고요,
feof()는 파일의 끝에서 파일을 더 읽으려다가 실패한 "이후"에 참이 됩니다. 즉 실패한 이유가 파일의 끝에 도달했기 때문인지를 확인할 때 쓸 수 있지, 읽기 "전"에 더 읽을 수 있는지 확인하는 용도로 쓸 수 없습니다.
좋은 하루 되세요!
이코드 참고해보세요.
https://kldp.org/node/160383
질문자입니다
다들 신경써주셔서 정말 감사드립니다 ㅜㅜ 과제하고 학교다니느라 시간이 늦어서 답변이 늦었습니다.
답변해주신 모든 분들 정말 감사드리고 답변해주신대로 잘 해결했습니다!!
정말 감사드립니다!!
댓글 달기