Использование read
для чтения данных в s
, а затем трактовать s
, как будто это строка (например, вы звоните strlen(s);
), неправильно. Функция read
не имеет представления о строках. Он просто пытается прочитать BUFFER_SIZE
байтов. Таким образом, вы можете получить меньше чем строку или несколько строк в s
за один read
, но маловероятно, что вы получите ровно одну строку (как предполагает ваш код).
Также обратите внимание, что вы никогда используйте num
в своем коде. Это также странно, поскольку num
содержит количество байтов, которые фактически были сохранены в s
. Попробуйте использовать num
для управления количеством байтов для преобразования.
Или, если вы действительно хотите работать со строками, взгляните на fgets
.
Кстати: проверьте, что sprintf
возвращает ... вы найдете это полезным; -)
Кстати: вы также можете рассмотреть strcat
вместо sprintf
Правильное решение может зависеть от входных данных но что-то вроде этого:
char* stringtohex(char* input, char* output, int num)
{
int loop=0;
while(loop < num)
{
sprintf(output, "%02X", input[loop]);
loop+=1;
output += 2;
}
//insert NULL at the end of the output string
*output = '\0';
return output;
}
Чтение части Примечание: ptr_child_2
должно указывать на пустую строку, чтобы начать с:
char RESULT[SOME_SUFFICIENT_BIG_NUMBER] = ""; // Or dynamic allocation
char* ptr_child_2 = RESULT;
int num;
char s[BUFFER_SIZE];
while((num = read(fd, s, BUFFER_SIZE)) > 0)
{
ptr_child_2 = stringtohex(s, ptr_child_2, num);
}
printf("%s\n", RESULT);