2011-09-16 4 views
4

문자는 \0으로 시작하는 문자열을 가지고 있습니다. 이는 설계 상으로는 실제 길이를 알고 있습니다.gdb에서 NUL로 시작하는 문자열 출력

길이가 알고있는 경우 "\0foo\0bar\0"과 같은 이스케이프를 사용하여 표현을 어떻게 인쇄 할 수 있습니까?

답변

6

글쎄, 당신은 배열로 인쇄 할 수 있어야한다 :

print *[email protected]

+0

+1 실제로 NULL를 통해 인쇄 할 수 있습니다 경계. – gamen

+0

+1 너무 원했고, 더 이상, 덜도 없었습니다. – Flavius

+1

@gamen : NUL과 NULL을 혼동하지 마십시오. 전자는 문자이고, 나중에 포인터입니다. – Flavius

0

당신은 GDB printf의 명령을 사용할 수 있습니다.

NULL 문자가 없으므로 char *을 1 씩 증가시켜 인쇄하면됩니다.

다음과 같은 코드가있는 경우 :

gcc -Wall -g -o test test.c 

다음과 같이 실행 GDB :

int main(void) 
{ 
    char * s1 = "abcd"; 
    char * s2 = "\0abcd"; 
    return 0; 
} 

과 함께 프로그램을 컴파일이 이후

gdb test 
(gdb) break main 
(gdb) run 
Breakpoint 1 at 0x100000f04: file test.c, line 3. 
(gdb) si 
1  char * s1 = "abcd"; 
(gdb) si 
2  char * s2 = "\0abcd"; 
(gdb) printf "%s", s1 
abcd 
(gdb) printf "%s", s2+1 
abcd 
관련 문제