2011-08-05 2 views
2

임베디드 타겟 인 마이크로 칩 PIC24 용 C 코드와 런타임 libc가 어떤 이유로 든 직렬 포트를 통해 \ 0 값을 제대로 보내지 않습니다.Printf는 Null 값을 무시합니까?

printf("\xEE\xEE\0test"); 

예를 들어 EE EE "test"를 전송하면 null 바이트는 무시됩니다.

이유가 무엇일까요?

편집 : Ermmm, 신경 쓰지 마세요. 문자열을 보내려면 puts를 사용하고 있습니다. doh '

+0

"EEEEtest"또는 "test"를 전송합니까? – BlackBear

답변

5

null 문자는 이 문자열의 끝인 것이므로 printf에있는 문자열 종결 자입니다.

printf("%c", '\0'); 

당신이 제안대로 test 다른 printf 호출에서 오지 않아 확신하는 라인에 0xEE 0xEE test을 받고 경우 작동 할 수있는 형식의 문자열로 putchar(), 또는 printf()를 사용?

+0

고마움, 당신의 의견은 내가 어리석은 실수를 알게했다. 나는 puts를 통해 sprintf를 넘겨 주었다. 그래서 전 혼자서 (형식 문자열에서 \ 0) 작동하지만 두 번째 puts는 문자열의 중간에 멈춘다. – overscore

+0

@overscore, 문제가 해결 된 것 같습니까? –

+0

예, 대기 5 분 – overscore

0

null 문자는 printf에 관한 한 문자열의 끝을 알립니다. 나는 그것이 "시험"을 전혀 보내지 않는다는 것에 놀랍니다. 특히 직렬 포트를 통해 쓰기 시스템 호출을 사용하는 것이 좋습니다.

+0

'fwrite'도 작동합니다. –

+0

'write()'또는'fwrite()'를 사용하십시오. 차이점은'fwrite'는 버퍼링을하고 C 표준에 의해 정의된다는 것입니다 (독립 실행 형 구현에서는 필요 없습니다). 'write'는 POSIX에 의해 정의됩니다. 또한 스트림이 2 진 모드인지 확인해야 할 수도 있습니다. 'stdout'은 기본적으로 텍스트 모드로되어 있습니다 만, 세부 사항은 내장 된 타겟과 다를 수 있습니다. –