임베디드 타겟 인 마이크로 칩 PIC24 용 C 코드와 런타임 libc가 어떤 이유로 든 직렬 포트를 통해 \ 0 값을 제대로 보내지 않습니다.Printf는 Null 값을 무시합니까?
printf("\xEE\xEE\0test");
예를 들어 EE EE "test"를 전송하면 null 바이트는 무시됩니다.
이유가 무엇일까요?
편집 : Ermmm, 신경 쓰지 마세요. 문자열을 보내려면 puts를 사용하고 있습니다. doh '
임베디드 타겟 인 마이크로 칩 PIC24 용 C 코드와 런타임 libc가 어떤 이유로 든 직렬 포트를 통해 \ 0 값을 제대로 보내지 않습니다.Printf는 Null 값을 무시합니까?
printf("\xEE\xEE\0test");
예를 들어 EE EE "test"를 전송하면 null 바이트는 무시됩니다.
이유가 무엇일까요?
편집 : Ermmm, 신경 쓰지 마세요. 문자열을 보내려면 puts를 사용하고 있습니다. doh '
null 문자는 이 문자열의 끝인 것이므로 printf
에있는 문자열 종결 자입니다.
printf("%c", '\0');
당신이 제안대로 test
다른 printf
호출에서 오지 않아 확신하는 라인에 0xEE 0xEE test
을 받고 경우 작동 할 수있는 형식의 문자열로 putchar()
, 또는 printf()
를 사용?
null 문자는 printf에 관한 한 문자열의 끝을 알립니다. 나는 그것이 "시험"을 전혀 보내지 않는다는 것에 놀랍니다. 특히 직렬 포트를 통해 쓰기 시스템 호출을 사용하는 것이 좋습니다.
'fwrite'도 작동합니다. –
'write()'또는'fwrite()'를 사용하십시오. 차이점은'fwrite'는 버퍼링을하고 C 표준에 의해 정의된다는 것입니다 (독립 실행 형 구현에서는 필요 없습니다). 'write'는 POSIX에 의해 정의됩니다. 또한 스트림이 2 진 모드인지 확인해야 할 수도 있습니다. 'stdout'은 기본적으로 텍스트 모드로되어 있습니다 만, 세부 사항은 내장 된 타겟과 다를 수 있습니다. –
"EEEEtest"또는 "test"를 전송합니까? – BlackBear