2011-04-13 5 views
1
printf ("%#p [ buf ] (%.2d) : %s \n", buf, strlen (buf), buf); 

전에 %#p (%.2d)을 보지 못했습니다. 어떻게 작동합니까? http://www.cplusplus.com/reference/clibrary/cstdio/printf/ 가입일이런 형식의 포맷터는 무엇을 의미합니까?

+0

§7.19.6.1/6에 따르면'#'는 결과를 _ "대체 양식"_으로 변환합니다. 그러나이 항목을 보는 한,'#'을'p' 형식 지정자 에 적용하면 정의되지 않은 동작이 발생합니다. 그래서 '% # p'가 정말로 원래 코더의 의도인지 모르겠습니다 (아마도 오타가 될 수 있습니다). –

답변

1

:

O, X로 사용되거나 X의 값이 0보다 상이한 값을 각각 0, 0X 또는 0x로 덧붙일 지정자.

e, E 및 f와 함께 사용하면 숫자가 뒤 따르지 않을지라도 기록 된 출력에 소수점이 포함됩니다. 기본적으로 소수점 뒤에 오는 경우 소수점이 기록되지 않습니다.

g 또는 G와 함께 사용하면 결과는 e 또는 E와 동일하지만 후행 0은 제거되지 않습니다.

p이 포인터 주소를 인쇄하는 데 사용되므로 아무 것도하지 않는 것 같습니다. 나는 어떤 컴파일러가 이것을 다르게 해석 할 것 같지만, 그것에 대한 언급은 찾을 수 없다.

1

p은 주소 (즉, 포인터)를 인쇄하도록 지정합니다. # 플래그는 "대체 양식"을 지정합니다.이 경우 대체로 0x이 출력 앞에 붙습니다.

1

형식 식별자의 플래그입니다. 즉 '#'플래그의 올바른 사용의 경우 좋은 설명이 here

0

확실하지 발견

그것은 이상의 가능성이 뾰족한 값 앞에 0X을 인쇄합니다 (그러나 나는 TBH를 확인하지 않은 경우) : O, X 또는 X와 함께 사용

  • 는 값이 0보다 다른 값을 각각 0, 0X 또는 0X 에 덧붙일 지정자.
  • e, E 및 f와 함께 사용하면 숫자가없는 경우에도 출력 결과에소수점이 포함됩니다. 기본적으로 자리가 없으면 소수점은 으로 작성되지 않습니다.
  • g 또는 G와 함께 사용하면 은 e 또는 E와 같지만 후행 0은 제거되지 않습니다.

주소에 0x를 추가하여 포인터에 대해 대체로 서식이 지정된 양식이 인쇄됩니다.

0

귀하의 경우 (p 변환) 결과는 설명서 페이지에 따라 정의되지 않습니다. 어쨌든 %p%#p은 내 컴퓨터에서 같은 값을 출력합니다 (0x7FFFF000처럼 보입니다).