C Конкатенация строк с использованием memcpy не добавляется

В некотором сетевом коде мне нужно кодировать структуры пакетов в буфере для отправки (2) через сокет, но создание закодированных буферов в больший буфер представляется проблематичным. Вот небольшой пример кода, иллюстрирующий то, что я делаю:

char    tbuf[] = "test";
char    *buf = malloc(300);
memset(buf, '\0', 300);

int     bytes_to_copy = 300;
int     bytes_copied = 0;

while (bytes_copied < bytes_to_copy) {
    memcpy(buf + bytes_copied, tbuf, sizeof(tbuf));
    bytes_copied += sizeof(tbuf);
}
/* free, return */

Это должно добавить "test" 60 раз в buf, но в конечном итоге buf будет содержать только один "test". Я использую memcpy неправильно?

1 ответ

Решение

Вы неоднократно копируете нулевой терминатор в конце теста. sizeof tbuf это 5.

Таким образом, все стандартные функции библиотеки C будут игнорировать все остальные конкатенанты.

Решение: скопируйте на один байт меньше memcpyи обязательно добавьте нулевой терминатор в последнюю строку.

Другие вопросы по тегам