Как решить эту ошибку шины?

Следующий фрагмент кода хорошо работал в одной программе и
вызвал ошибку шины в другом

    char *temp1;
temp1=(char*)malloc(2);
for(b=3;b>=0;b--)
{
sprintf(temp1,"%02x",s_ip[b]);
string temp2(temp1);
temp.append(temp2);
}

s_ip [b] имеет тип byte, а temp является строкой. Что вызвало эту ошибку шины и как я могу решить эту проблему?
Кроме того, в чем причина этого странного поведения?

0

Решение

temp буфер должен иметь длину 3 символа sprintf() добавит нулевой терминатор после двух шестнадцатеричных символов:

char temp1[3];

Кажется, нет никакой причины использовать динамически распределенную память. Обратите внимание, что вы можете избежать создания временного string названный temp2 используя std::string::append():

temp.append(temp1, 2);

Альтернативой является избегать использования sprintf() и использовать std::ostringstream с IO манипуляторами:

#include <sstream>
#include <iomanip>

std::ostringstream s;

s << std::hex << std::setfill('0');

for (b = 3; b >= 0; b--)
{
s << std::setw(2) << static_cast<int>(s_ip[b]);
}

Тогда используйте s.str() чтобы получить std::string пример.

6

Другие решения

Строка с 2 символами фактически требует 3 байта, потому что есть также завершающий '\0' в конце строки.

3

По вопросам рекламы [email protected]