내 프로그램의 일부에 아무런 작업이없는 경우 NUL 문자를 인쇄해야하는 상황이 있습니다. 내가이 인쇄 할C에서 공백없이 NUL 문자를 인쇄하려면 어떻게해야합니까?
char x = '\0';
...
printf("@%[email protected]\n", x);
을 : 코드 아래 예를 들어 가지고
@@
를하지만 출력합니다
@@
\ 0 문자가 위와 같이 공백을 인쇄하지 않도록하는 올바른 방법은 무엇입니까?
내 프로그램의 일부에 아무런 작업이없는 경우 NUL 문자를 인쇄해야하는 상황이 있습니다. 내가이 인쇄 할C에서 공백없이 NUL 문자를 인쇄하려면 어떻게해야합니까?
char x = '\0';
...
printf("@%[email protected]\n", x);
을 : 코드 아래 예를 들어 가지고
@@
를하지만 출력합니다
@@
\ 0 문자가 위와 같이 공백을 인쇄하지 않도록하는 올바른 방법은 무엇입니까?
if (x == 0)
printf("@@\n");
else
printf("@%[email protected]\n", x);
실제로 공간을 인쇄하지 않고 실제로 \ 0을 출력합니다. 텍스트를보고있는 내용이 이면 \ 0을 공백으로 표시합니다.
Theres 코드에 더 많은 그래서 방법을 스위트 룸 날 잘 모르겠다 –
어떤 시스템을 사용하십니까? 이 코드는 나를 위해 @@
을 인쇄합니다.
#include <stdio.h>
int main(int argc, char *argv[])
{
char x = '\0';
printf("@%[email protected]\n", x);
return 0;
}
그리고 내 로그 :
$ make
cc -Wall -o app main.c
$ ./app
@@
아마도 printf는이 경우 정의되지 않았거나 잘못 시스템 중 하나에서 구현? – Smashery
시도해보십시오. ./app | hexdump -C' (필요한 경우 hexdump 설치). 실제로 NUL 바이트를 출력한다는 것을 알 수 있습니다. 단말기는 문자가없는 것으로 표시합니다. –
물론, 그것은 그 바이트를 출력합니다; 터미널 윈도우의 출력은 여전히'@@'입니다. 그것은 당신이 거기에 벨 문자 (또는 다른 아닌 인쇄, 나는 짐작) 붙어 경우 동일합니다. Dunno 왜 downvote 가치가있어. –
약간 더 컴팩트 한 @codeka's solution의 :
#include <stdio.h>
int main(void) {
char x = '\0';
printf(x ? "@%[email protected]\n" : "@@\n", x);
return 0;
}
'printf ("@@ \ n", x); 허용 되었습니까? –
Alok : 예. 표준은 다음과 같이 말합니다. "인수가 남아있는 동안 형식이 고갈되면 과도한 인수는 (항상 그렇듯이) 으로 평가되지만 그렇지 않으면 무시됩니다." – caf
FYI 7.19.6.1 in WG14/N1124 –
당신은 1의 정밀도로 %s
지정자를 사용할 수 있습니다 : 여기 내 샘플 프로그램입니다
printf("@%[email protected]", &x);
이것은 x
의 데이터를 '\0'
종료 문자열로 취급하지만 최대 하나의 문자 만 인쇄하므로 문자 다음에 '\0'
터미네이터가 없어도 상관 없습니다. x == 0
이면 빈 문자열이므로 '@'문자 사이에 아무 것도 인쇄되지 않습니다.
물론 이렇게하면 문자 자체가 아닌 문자에 대한 포인터를 전달해야합니다 (따라서 &x
).
일종의 해킹이지만, 문제의 허용 범위 내로 아직 생각합니다.
null-termination을 사용하면 "@"가 인쇄 될 것입니다. 아무도 왜 이것이 사실이 아니라고 나를 깨우칠 수 있습니까? – Smashery
@Smashery :'printf'는 형식 문자열을 통해 모든 문자를 인쇄합니다. '%'는 형식 지정자이므로'printf'가 하나가되면 모드를 전환하고 인수 목록에서 다음 변수를 해석 할 대상을 찾습니다. 이 경우 지정자는 "c"이므로 인자를 문자로 처리하고 인쇄 (0을 출력) 한 다음 나머지는 서식 문자열을 계속 인쇄합니다 * 인쇄를했는지 여부 다음과 같은 문자열 :'char str [] = { '@', '\ 0', '@'}; printf ("% s", str);', 단지 "@"만 출력합니다. 이것은'printf'가 문자열을 출력 할 때 0에서 정지하기 때문입니다. – GManNickG
@GMan - 건배! – Smashery