2011-01-06 3 views
4

은 내가char 포인터 (C++) 내부에서 데이터를 인쇄하는 방법은 무엇입니까? 나는 단지 주소를 볼 수 디버깅 할 때

function(const char * data) 
{ 
//how to print the data which is inside the data 
} 

있습니다. 인쇄 할 경우 (* 데이터) 아무 것도 인쇄되지 않습니다.

아이디어가 있으십니까?

+2

'print'는 표준 C++ 기능이 아니며 디버거의 함수 인 경우 사용중인 디버거를 지정해야합니다. '* data'는'data' 주소의 첫 번째 문자만을 가리 킵니다. 문자가 제어 문자 인 경우 인쇄되지 않을 수도 있습니다. 이는 터미널/콘솔 소프트웨어에 따라 다릅니다. ASCIIZ 표현의 빈 문자열은 단순히 0 값 ('0'문자가 아님)이므로 유용하게 인쇄되지 않을 수 있습니다. 인쇄 (데이터)를 시도 할 수도 있지만 자신감을 줄 수있는 환경을 충분히 지정하지 않은 것입니다. –

+0

그가 gdb에 대해 이야기하고 있는지 궁금합니다. –

+1

사용중인 디버거를 지정하십시오. 'print' 명령에서 gdb를 사용하고 있다는 것이 가장 좋습니다. 그렇다면'x' 명령을 시도하십시오. 이를 통해 메모리 블록 내용을 인쇄 할 수 있습니다. – 341008

답변

8
#include <iostream> 

void function(const char * data) 
{ 
    std::cout << data; 
} 
-1
std::cout << std::string(data); 
+4

std :: cout << 데이터와 다른 점은 무엇입니까? 데이터가 int이므로 –

+0

! ! ! : 포인터가된다는 것은 정수를 의미합니다. 따라서 int를 출력하도록 요청하면 int를 인쇄합니다. –

+3

아니요. 포인터는 내부적으로 일반 정수로 표시 되더라도 (대부분의 경우) 포인터입니다. 'cout << data'는 가리키는 주소를 출력하지 않고 가리키는 널 종료 문자열을 출력합니다. 'char *'는'int' (또는 어떤 정수형)가 아니기 때문에'operator <<'의 다른 오버로드를 호출합니다 - 이것은 c 문자열을 출력하는 방법을 알고 있습니다. – delnan

3

printf("%s\n", data)이 맞습니다.

관련 문제