Вам необходимо подсчитать позицию ввода и вывода отдельно.
for(i = 0; i<len; i++)
{
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+i*2 , "%02X", word[i]);
}
}
Если ваше условие истинно и вы печатаете текст, счетчик i
увеличивается.Это не только используется для перехода к следующему символу, но и определяет позицию в массиве вывода.Это означает, что 2 байта в массиве out не затрагиваются, пока вы анализируете ввод.
Если случайно у вас там 0 байт, ваша строка заканчивается здесь.
Это может привести кследующая схема: "3836373431\0\03330303131"
, которая печатается как "3836373431"
.
. Вы можете добавить другую переменную для вывода и увеличивать ее только тогда, когда вы действительно конвертируете в шестнадцатеричное значение.
int outpos;
for(i = 0, outpos = 0; i<len; i++)
{
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+outpos*2 , "%02X", word[i]);
outpos++;
}
}