char* 크기가 처음 가리키는 것으로 할당이 되나요?
VC++로 프로그램을 만드는 중입니다..
char* FileName;
char date[150];
char txt[10]=".txt";
FileName = (char*)(Marshal::StringToHGlobalAnsi(this->Master_textBox->Text)).ToPointer();
-> TextBox에서의 문자열을 char*로 전환하여 가리키고요..
FileName=replaceAll(FileName,":","");
FileName=replaceAll(FileName," ","");
-> 문자열에서 ':'와' '을 지워줍니다.
sprintf(date,"_%04d%02d%02d%02d%02d%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,t->tm_hour, t->tm_min, t->tm_sec);
-> 현재 날짜를 받구요
strcat(FileName,date);
strcat(FileName,txt);
파일 명에 날짜와 .txt를 마지막에 붙여 주고나서
fwrite1=fopen(FileNames,"w");
파일을 쓰려고 하면 에러가 납니다..
제 생각에는 FileName이 처음 TextBox에서 문자열을 가리킬 때 그 때 크기가 정해져서, 뒤에 날짜를 붙이면 길이가 초과하여서 안되는 것 같은데
확실하지가 않습니다.
그 이유는 위에 sprintf(date,"_%04d%02d%02d%02d%02d%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,t->tm_hour, t->tm_min, t->tm_sec);
에서 년월일시분초 다 안넣고, 년월일 까지 하면 정상적으로 돌아가더라고요.. 그래서 char* 가 처음에 가리키는 문자열을 사이즈로 잡는 게 맞는 건지 알고 싶어 글 올립니다.
char*는 메모리의 위치를 가리킬 뿐 실제로 할당된
char*는 메모리의 위치를 가리킬 뿐 실제로 할당된 메모리의 크기나 문자열의 길이 등에 대한 정보를 담고 있지 않습니다.
ToPointer()는 내부에서 사용중인 문자열을 저장하기 위한 메모리 주소를 리턴할 것이므로, 해당 포인터에 strcat 등으로 임의의 문자열을 추가하거나 수정하는 것은 오동작을 유발하거나 런타임 에러를 발생시킬 수 있습니다.
ToPointer()가 리턴하는 문자열을 직접 수정하지 마시고, 이를 충분한 크기의 char[]에 복사해서 사용해보세요.
댓글 달기