TCHAR *str;
wsprintf (str,TEXT (\"질문\"));
TextOut (hdc,0,0,str,lstrlen(str));
이 안되는 이유가
Str의 크기를 지정해주지않았기때문이 맞나요?
TCHAR *str = TEXT (\"질문2\");
TextOut (hdc,0,0,str,lstrlen(str));
이 되는이유는 선언과동시에 초기화하면
Str의 크기가 자동으로 정해지기때문인가요?
wsprintf (str,TEXT (\"질문\"));
TextOut (hdc,0,0,str,lstrlen(str));
이 안되는 이유가
Str의 크기를 지정해주지않았기때문이 맞나요?
TCHAR *str = TEXT (\"질문2\");
TextOut (hdc,0,0,str,lstrlen(str));
이 되는이유는 선언과동시에 초기화하면
Str의 크기가 자동으로 정해지기때문인가요?
전자는 쓰레기값의 주소만 갖고 있지 문자열을 읽거나 써 넣을 공간을 가리키고 있지 않다.
후자는 리터럴 문자열 영역, 즉 데이타영역의 시작부분 근처에 적어놓은 "질문2" 라는 문자열의 시작주소를 담고 있는거고.
따라서 니가 임의의 스트링을 wsprintf 로 써넣고 싶다면 TCHAR str[갯수]; 이렇게 해서 쓰든지, TCHAR* str = new TCHAR[갯수]; 이렇게 쓰든지 해야지.
후자는 니가 수동 삭제해야하고, 전자는 중괄호로 쌓인 scope 가 끝나면 자동 삭제고.
후자를 두번 해서 헷갈리는데 앞에 말한 후자는 질문2의 코드를 이야기 하는거고 뒤에 말한 후자는 new 로 선언한걸 말하는거.
리터럴 문자열(코드 내에 따옴표로 삽입한 문자열) 영역은 대개의 컴파일러에서 읽기 전용이니까 써넣는 용도로 쓸 순 없을거다.
감사합니다
코세 친절하네 ㅎㅎㅎ 문제될꺼까징 지적해주네 ㅋ