Visual C++ .NET에서 System::String*에서 Char*로 변환하는 방법

이 문서에서는 다음 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 참조합니다.
  • System.Runtime.InteropServices

문서 내용

요약

이 문서에서는 Visual C++ .NET에서 Managed Extensions를 사용하여 System::String*에서 char*로 변환하는 몇 가지 방법을 설명합니다.

방법 1:

PtrToStringChars는 실제 String 개체에 대한 내부 포인터를 제공합니다. 이 포인터를 관리되지 않는 함수 호출에 전달한 경우에는 먼저 포인터를 고정시켜 비동기 가비지 수집 프로세스 중에 개체가 이동하지 않도록 해야 합니다.
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);

방법 2:

StringToHGlobalAnsi는 관리되는 String 개체의 내용을 기본 힙(heap)에 복사한 다음 즉시 ANSI(American National Standards Institute) 형식으로 변환합니다. 이 방법에서는 필요한 기본 힙 메모리가 할당됩니다.
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);

방법 3:

VC7 CString 클래스에는 관리되는 String 포인터를 사용하고 CString을 해당 내용과 함께 로드하는 생성자가 있습니다.
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str);
printf(str3);

전체 예제 코드

//compiler option: cl /clr  
#include <vcclr.h>
#include <atlstr.h>
#include <stdio.h>
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

int _tmain(void)
{
System::String * str = S"Hello world\n";

//method 1
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);

//method 2
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);

//method 3
CString str3(str);
printf(str3);

return 0;
}

참조

가장 많이 참조되는 다른 Visual C++ .NET Microsoft 기술 자료 문서를 보려면 다음 Microsoft 웹 사이트를 방문하십시오. Visual C++ .NET에 대한 자세한 내용은 아래의 Microsoft Usenet 뉴스 그룹을 참조하십시오.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
속성

문서 ID: 311259 - 마지막 검토: 2006. 1. 20. - 수정: 1

피드백