У меня есть постоянный указатель массива и его размер, как это:C: Const указатель массива изменяемого размера массива
const UInt8* raw_addr = ujArrayRawAccessStart(addr);
UInt8 addr_len = ujArrayLen(addr);
И мне нужно добавить что-то к концу этого массива, то «\ 0», потому что на самом деле мы работаем со строками и кодом дальше по строке, это требует. Чтобы сделать это, я имел в виду инициализации нового массива, как это:
UInt8 formatted_addr[sizeof(raw_addr)/sizeof(raw_addr[0]) + sizeof('\0')];
for(int i = 0; i< addr_len; i++){
formatted_addr[i] = raw_addr[i];
}
formatted_addr[addr_len]='\0'; //string literal needs to end with \0
Однако, это вызывает у меня узел, на котором узел работает, чтобы урод (его выход UART имеет неверный формат), указывая, что я где я не должен.
Что я делаю неправильно, или есть лучшие способы добиться того, чего я хочу?
'UInt8 formatted_addr [sizeof (raw_addr)/sizeof (raw_addr [0]) + sizeof ('\ 0')];' -> 'UInt8 formatted_addr [addr_len + 1];' – LPs
BTW: 'sizeof ('\ 0 ') '==' sizeof 0' в C. Вероятно, вы просто хотите '1' – joop
@joop' sizeof (' \ 0 ') 'is' sizeof (int) ', и поэтому это, вероятно,' 2' или '4 'а не' 1'. – mch