다음 코드가 있지만 예외가 발생합니다. itoa가 없다면 "게임"은 문제가 있다고 생각하지 않습니다. TextOutA는 내가 winapi를 사용하기 때문입니다.new 및 delete char * 예외가 발생합니다.
char* p1 = new char[2];
itoa(10,p1,10);
TextOutA(hDC,5, currenty,p1,2);
delete[] p1;
다음 코드가 있지만 예외가 발생합니다. itoa가 없다면 "게임"은 문제가 있다고 생각하지 않습니다. TextOutA는 내가 winapi를 사용하기 때문입니다.new 및 delete char * 예외가 발생합니다.
char* p1 = new char[2];
itoa(10,p1,10);
TextOutA(hDC,5, currenty,p1,2);
delete[] p1;
귀하의 StringBuffer는 itoa는 널 종료 문자를 서면으로 버퍼 용량을 넘
너무 짧습니다.
char* p1 = new char[3];
itoa(10,p1,10);
TextOutA(hDC,5, currenty,p1,2);
delete[] p1;
버퍼를 전체 정수 범위를 수용 할만큼 충분히 크게 만들 것을 제안합니다.
편집 그냥 경우, 문자열 스트림 제안에 정성 들여 :
#include <sstream>
//....
{
std::stringstream ss;
ss << 10;
std::string s = ss.str();
TextOutA(hDC, 5, currenty, s.c_str(), s.length());
}
당신은 모든 C 문자열처럼, 그것은 N + 1 개 문자를 소요하기 때문에, "10"를 저장하기에 충분한 공간을 할당하지 않은 여기서 N은 문자열의 길이입니다. 마지막 문자는 널 종결 자입니다. 3 자 (또는 그 이상)를 할당해야합니다. 또는 snprintf
을 사용하십시오. 또는 std::stringstream
여기에는 을 사용하는 숫자가 much better alternatives인데, 특수 기수 포맷이 필요 없다고 가정합니다 (일부는 그렇게 할 수도 있음).
문자열에 충분한 공간을 할당하지 않았습니다.
char* p1 = new char[2];
itoa(10,p1,10);
p1
는 (다른 캐릭터가 종료 NUL이다) -1- 문자열 만 충분하는 2 바이트이다. 32 비트 시스템의 경우 11이고 기본 = 10 인 가능한 결과를 보유 할 수있을만큼 길게해야합니다.
'std :: ostringstream'과'std :: string'을 사용하고 버퍼의 크기에 대해 걱정할 필요가 없다. (이와 같은 간단한 경우,'boost :: lexical_cast'을 사용하면됩니다.) –
@James : 물론 그 부분도 – sehe
고맙습니다. 일했다! – dusm