2016-07-08 7 views
-3

여기서 무엇이 잘못 되었는가에 대해서는 잘 모른다.C++ stringstream에서 const char * 검색

std::stringstream ss("Title"); 
ss << " (" << 100 << ")"; 
const char* window_title = &ss.str().c_str(); 

나는 make으로 달렸습니다. 행복하지 않았습니다.

내가 이해, 내가 추가 한 다음 단어 "제목"과 stringstream를 만들고있어에서 "(100)"그것에
[17%] Building CXX object CMakeFiles/game.dir/src/main.cpp.o 
path: error: cannot take the address of an rvalue of type 'const value_type *' 
     (aka 'const char *') 
      const char* window_title = &ss.str().c_str(); 
            ^~~~~~~~~~~~~~~~~ 
1 error generated. 
make[2]: *** [CMakeFiles/game.dir/src/main.cpp.o] Error 1 
make[1]: *** [CMakeFiles/game.dir/all] Error 2 
make: *** [all] Error 2 

. 그런 다음 char이고 그 포인터를 window_title에 저장하는 "C 문자열"을 검색하고 있습니다.

무엇이 잘못 되었나요?

+5

스팸 태그를 사용하지 마십시오! C는 C++이 아닙니다! – Olaf

+2

주소'ss.str()을 취할 필요가 없습니다 .c_str();은 이미'const char *'를 반환합니다. –

+0

어, 왜 내가 10K 다운 보턴을 얻었습니까? 나는 그 문제를 설명했다. 그렇지 않습니까? – Lolums

답변

4

ss.str()은 호출 후 소멸되는 임시 객체를 반환합니다. 임시 객체의 메모리에 포인터를 사용해서는 안되며, 정의되지 않은 동작입니다. 또한 c_str()은 이미 Null 종료 문자 배열에 대한 포인터를 반환합니다. 컴파일러는 단순히 임시 객체의 메모리에 주소를 사용하지 않고이 주소에 대한 포인터를 가져 와서 합법적으로 그렇게하려고합니다. 이렇게 컴파일되고 작동합니다.

std::stringstream ss("Title"); 
ss << " (" << 100 << ")"; 
//Create a string object to avoid using temporary object 
std::string str = ss.str(); 
const char* window_title = str.c_str(); 
+0

아, 이걸 이해하지만 링크 된 오류가 발생합니다 : http://pastebin.com/raw/NpbD7FCJ - 내 잘못입니까? (환경 때문에) – Lolums

+0

@Lolums 당신은 ''헤더를 포함 시켰습니까? – buld0zzr

+0

오케이. 내가 바보. 감사! – Lolums