hLength[2]
все еще не инициализирован.Если он не заполнен нулевым терминатором, передача его любой функции, ожидающей строковый параметр, является неопределенным поведением.
Хотя вы можете вручную заполнить hLength[2]
нулями, как вы это делали с позициями 0
и 1
, более идиотский способ сделать это - использовать библиотечную функцию snprintf
с ограничением в 2 символа в исходной строке:
snprintf(hLength, 3, "%*s", 2, string);
Или даже при объявлении hLength
:
char hLength[3] = { string[0], string[1] }; // hLength[2] is initialized with a '\0' now
Обратите внимание, что неявное заполнение остатка массива нулями допустимо только в том случае, если при объявлении массив частично инициализируется с помощью фигурных скобок, как в { val1, val2 ... }
.Назначение отдельных элементов массива после объявления не сделает этого за вас.