Printf игнорирует нулевые значения? - PullRequest
2 голосов
/ 05 августа 2011

Я пишу код C для встроенной цели, Microchip PIC24, и библиотека libc по какой-то причине не будет правильно отправлять значения \ 0 через последовательный порт.

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

, например, отправляет EE EE"test", нулевой байт игнорируется.

Кто-нибудь знает, почему это может быть?

РЕДАКТИРОВАТЬ: Эммм, не обращайте внимания на XD.Я использовал путы для отправки через строку .. doh '

Ответы [ 2 ]

5 голосов
/ 05 августа 2011

Нулевой символ - это терминатор строки в C. printf на этом останавливается, потому что \0 является концом строки, насколько это касается. Использование putchar() или printf() со строкой форматирования может работать:

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

Если вы получаете 0xEE 0xEE test на линии, как вы предлагаете, вы уверены, что test не приходит от другого printf вызова?

0 голосов
/ 05 августа 2011

Нулевой символ указывает на конец строки в том, что касается printf.Я удивлен, что это посылает "тест" вообще.Возможно, вам лучше использовать системный вызов write, особенно через последовательный порт.

...