Предыстория: у меня есть несколько сценариев, которые анализируют файлы журнала в поисках шестнадцатеричных чисел, находя начальный "0x". Наша встроенная библиотека C заменена на новую printf. Новый printf больше соответствует стандартам, чем наш предыдущий, и мои скрипты сломались.
В системе Linux:
#include <stdio.h>
int main( void )
{
printf( "%#010x\n", 0 );
printf( "%#010x\n", 1 );
return 0;
}
Вывод (с использованием glibc):
0000000000
0x00000001
Вывод на нашей прошивке был:
0x00000000
0x00000001
Из printf (3), на символе флага '#': «Для преобразований x и X к ненулевому результату добавляется строка« 0x »(или« 0X »для преобразований X).»
Мне любопытно почему . Не копаясь в документах стандартов C и не покупая обед для членов комитета по стандартам, почему бы не поставить 0x в начале аргумента с нулевым значением?