Нет разницы между результатами, полученными при двух вызовах snprintf
. В обоих случаях символ «1» записывается в указанное место, за которым следует нулевой символ.
Существует разница в том, как GDB отображает данные. Для байтов 0 и 1 из string
он показывает:
1\0
, что означает символ «1», за которым следует символ с кодом 0, также называемый нулевым символом. Для байтов 10 и 11 из string
он показывает:
\61\0
, что означает символ с восьмеричным кодом 61, за которым следует символ с кодом 0. Код ASCII для «1» равен 61 в восьмеричном (49 в десятичном виде), так что это то же значение, что и в байте 0, при условии, конечно, что ваша реализация C использует ASCII.
Единственное отличие заключается в отображении. Это отображение является следствием поведения GDB, а не вашей программы. Мы можем предположить, что GDB отображает «1» в байте 10 в восьмеричном виде, а не в виде литерала «1», потому что перед ним или в окружении непечатаемых символов, или потому, что после нулевого символа заканчивается нормальная строка.