|
음... 씨언어의 기본내용을 많이 잊으신듯 싶군요...
메모리에 관련된 내용은 특히나 포인터를 쓸때 아주 예민한 부분이므로
잊었다 하더라도 다시 리뷰를 하셔야 프로그래밍 하는데 도움이 될 것입니다...
우선 소스상의 약간 수정되면 좋을 부분에 대한 말씀을 드리죠...
파일의 길이를 얻기 위해 fseek으로 파일포인터를 마지막으로 보내고 ftell로 오프셋
값을 얻은후에 fseek으로 다시 원점으로 되돌리셨는데 flength 던가 라는 함수가
있습니다...
그리고 파일을 옮기기 위해 사용하신 다음 문장에서
while(i <= length)
{
ld = fread(buf, strlen(buf)+1, 1, of);
wd = fwrite(buf, strlen(buf)+1, 1, sf);
i = i = ld;
}
이 문장 전에 buf의 메모리를 할당해주셔도 되고 이런 경우 아예 배열로 잡아도
상관없겠죠...
즉, buf = (char *)malloc( 원하는 바이트수 ); 라는 문장을 저 루프문 위에다
써주시면 되겠고 다음 부분을
ld = fread(buf, strlen(buf)+1, 1, of);
wd = fwrite(buf, strlen(buf)+1, 1, sf);
i = i = ld;
이렇게 고쳐야 하겠네요...
ld = fread(buf, 원하는 바이트수 , 1, of);
wd = fwrite(buf, 원하는 바이트수 , 1, sf);
i = i + ld;
참... i 선언하셨을 때 0으로 셋팅해주셔야 겠죠?
다쓰고 난 다음 free(buf); 잊지 마시구요...
수야 님이 쓰신 글 :
: 안녕하세요..
:
: 또.. 꼼지락.수야랍니다 ㅡ.ㅡ
:
: alloc를 사용할려고 하는데요... 어디서 어떻게 사용해야하는지를 모르겠습니다. ㅡ.ㅡ
:
: 고2때 하고 6년지난 지금 한번도 안써봐서 ㅡ.ㅡ
:
: 도무지 기억이 ㅡ.ㅡ ( 흑.. 나이가 ㅠ_ㅠ )
:
: 아래 소스상에 어디에 어떻게 써야하는지좀 알려주세요
:
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : : if(OpenDialog1->Execute())
: : : {
: : : FILE *of, *sf;
: : : char *buf;
: : : long length, i;
: : : int ld, wd;
: : : char *Fn;
: : :
: : : ld = 0;
: : : wd = 0;
: : : i = 0;
: : :
: : : Fn = OpenDialog1->FileName.c_str();
: : :
: : : if((of = fopen(Fn, "rt")) == NULL)
: : : {
: : : ShowMessage("Error Open LoadFile..");
: : : return;
: : : }
: : :
: : : if((sf = fopen("c:\\S.mp3", "wb")) == NULL)
: : : {
: : : ShowMessage("Error Open SaveFile..");
: : : return;
: : : }
: : :
: : : fseek(of, 0, SEEK_END);
: : : length = ftell(of);
: : : fseek(of, 0, SEEK_SET);
: : :
: : : while(i <= length)
: : : {
: : : ld = fread(buf, strlen(buf)+1, 1, of);
: : : wd = fwrite(buf, strlen(buf)+1, 1, sf);
: : : i = i = ld;
: : : }
: : :
: : : StatusBar1->SimpleText = "Complite";
: : :
: : : fclose(of);
: : : fclose(sf);
: : : }
: : : }
: : : //---------------------------------------------------------------------------
|