2009-09-25 5 views
1

그래서 32 비트 응용 프로그램의 포트를 64 비트로 해결하는 중입니다. x64 용으로 컴파일 할 때 경고 메시지가 나타납니다. ` CString sig; sig = "something"; sig = sig.left (strlen (정의 된 것));VC++ CLI 응용 프로그램 32-64 비트 CString 질문

` < < < < < < 그래서, 나는 그것이 암시 적으로 int로하는 strlen 함수 값을 변환 sig.left에 대한 경고를 얻을. x64에서 strlen은 64 비트 size_t를 반환하기 때문에 경고 메시지가 나타납니다. 이걸 고치는 나의 선택은 무엇입니까 .. 어떤 다른 방법?

감사

+0

당신이 기존 코드를 포팅하고 있기 때문에이, 당신은 아마 CString을 함께 붙어되어 있지만, 일반적으로 당신은 아마 표준 표준 : : 문자열을 사용한다 :로

필요한 캐스트는 간단하다. – Dima

답변

3

strlen 항상 size_t를 반환합니다. 그러나 size_t는 64 비트 및 32 비트 운영 체제에서 다른 너비입니다.

CString.left 그러나 int가 필요합니다. 귀하의 코드가 잘되어야합니다 (문자열이 너무 길어 int 값을 오버런하지 않는다면). 그러나 컴파일러는이 문제를 일으키는 것으로 경고합니다.

캐스트를 사용하여 경고를 무시할 수 있습니다. "안전"하고 싶다면 검사를 추가하면됩니다.

CString sig; 
sig = "something"; 
sig = sig.left((int)strlen(something_defined)); 
+0

짧은 주조가 내 경고를 고쳤습니다. 그러나 나는 시간이있을 때 그것을 다시 쓰고 싶다. – Gentoo

관련 문제