|
일단 답변 감사합니다^^
아.. 그렇다면 fileLength가 프로그램이 실해되면서 결정되기 때문에 배열이 동적으로 생성되는 개념이 되는건가요?
그렇다면 아래 소스같은 경우
const int count =3;
: : char buf[count];
count 값이 프로그램이 실행중에 결정되는 것이 아니라는 거군요?
실제로 값이 컴파일할때, 실행할때, 컴파일전에 이렇게 3군데서 정해질수 있는거지요? 즉 위는 컴파일할때 할당(정의?) 되기 때문에 사용가능하고,
FILE* file;
: : file = fopen("파일명","wb");
: : if(file == NULL) printf("error");
: : const int fileLength = filelength(fileno(file));
: : char buf[fileLength];
같은 경우는 프로그램이 실행될때 값이 정해지기 때문에 불가능하다란게 맞는 건가요?
Intotheblue 님이 쓰신 글 :
: C/C++에서 배열은 중간에 동적으로 사이즈를 변경할수 없습니다.
: 동적으로 변경되는 경우는 malloc이나 new 로 동적생성하는 방법밖에 없고..
:
: 조금 특별한 자료구조로...
: 동적으로 변경되는 배열을 쓰고 싶으시면..
:
: 강좌란이나 어딘가에...
: dynamic_array 사용법이 있을겁니다.
:
: 임형섭 님이 쓰신 글 :
: : 우선
: : int count =3;
: : char buf[count];
: : 이런식으로 쓰면
: :
: : //--
: : [BCC32 Error] Unit2.h(52): E2313 Constant expression required
: : Full parser context
: : File1.cpp(7): #include Unit2.h
: : Unit2.h(13): class CompressFile
: : Unit2.h(66): decision to instantiate: void CompressFile::unCompressFile(char *,char *)
: : --- Resetting parser context for instantiation...
: : Unit2.h(41): parsing: void CompressFile::unCompressFile(char *,char *)
: : //--
: : 란 에러가 뜨네요. 그래서 상수 값을 쓰라는 건가 보다라고 생각해서
: :
: : const int count =3;
: : char buf[count];
: : 이런식으로 하니 에러가 안났습니다.
: :
: : 드디어 질문 파일의 길이를 구하는데
: : FILE* file;
: : file = fopen("파일명","wb");
: : if(file == NULL) printf("error");
: : const int fileLength = filelength(fileno(file));
: : char buf[fileLength];
: : 라고 하면 될 줄 알았는데 맨 위와 같은 에러가 뜹니다. 그 이유를 알고 싶습니다. -- 알고 보니 반환형이 long 형이네요
: : 그럼 다음 질문
: : 실제로 char buf[fileLength];를 char* buf = (char*)malloc(fileLength) 라고 하면 아무 문제가 없지만 긍금한 것은
: : 그냥 배열로 만드는 방법은 없을까요?
|