차근차근/C

"std::string"에서 "LPCTSTR"(으)로의 적절한 변환 함수가 없습니다.

예쁜꽃이피었으면 2014. 9. 4. 10:22

http://blog.daum.net/penbell/71



string <-> char * 타입 변환

1. string과 char *

C에서 문자열을 저장하기 위해서는 char[] 을 만들거나 char *를 사용하였다. C++에서는 좀더 편리하게 문자열을 사용하기 위해

string 타입이 생겼다. 먼저 string 타입을 사용하기 위해선 다음과 같이 선언해줘야 한다.

#include <string>

using namespace std;

C에서 문자열을 사용하기 위해서는 #include <strng.h>를 선언해줬지만 C++에서는 주로 .h가 생략된 헤더파일이 많다.

결론적으로 문자열을 저장한다는 것은 같은데 string 타입의 문자열을 char *타입에 저장하거나 그 반대는 어떻게 될까?

 

2. char * string 변환

string타입은 char * 타입의 문자열을 대입시켜도 그대로 복사가 이루어진다. 따라서 그냥 대입하면된다.

string str;

char *ch = "hello world";

str = ch;

너무 간단하다

 

3. string -> char* 변환

반대로도 그냥 대입이 되었으면 좋겠는데 아쉽게도 그렇게 하면 다음과 같은 에러가 발생한다.

-> std::string 에서 'char *'(으)로 변환할 수 없습니다.

string 타입은 char * 타입으로 자동형변환이 안되기 때문에 에러가 나는 것이다.

그렇다면 명시적으로 형변환을 시킬 수 있을까?

답은 있다. 그 방법은 다음과 같다.

ch = str.c_str();

위와 같이하면 string 타입의 str변수가 char *타입이 되어서 ch에 저장이 된다.

이것도 생각보단 어렵지 않다.

 

사실 string타입에 관련된 함수가 이미 많이 정의되어 있다. 변수명에  . 만찍어도 다양함 함수가 나오는데 이것들의 기능을 알고 싶다면

찾아 보길 바란다.




반응형