Как скопировать uint8_t * в массив char - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь скопировать uint8_t * в массив символов, uint8_t * не заканчивается, но у меня есть другой uint8_t с длиной сообщения. Как мне скопировать uint8_t * в массив символов без получения сегментов.

uint8_t *name; //Set to something beforehand, it's part of an server STUN.
uint8 name_length; //Also set to something I just know is less than 255.

//I've tried
char nameArray[255];
memcpy(nameArray, name, name_length-1);
nameArray[name_length] = '\0';

Сегфоулты из-за неверного размера чтения

1 Ответ

1 голос
/ 11 октября 2019

Из-за целочисленного продвижения переменная name_length на сайте вызова memcpy() конвертируется в int. Если значение равно 0 (нулю), вычитание 1 приводит к значению -1. Затем он конвертируется в size_t, что дает SIZE_MAX. memcpy() счастливо начинает копировать эту сумму, но выходит за пределы допустимого диапазона адресов.

Поскольку вычитание 1 неверно, удалите его.

...