strncpy Чтобы strcpy Эквивалентность в коде

У меня есть эта уродливая функция, и я чувствую, что весь strncpy должен быть просто strcpy:

void PackData(char*& cursor, const std::string& data) {
*(reinterpret_cast<int*>(cursor)) = static_cast<short>(data.length() + 1);
cursor += sizeof(int);
// copy the text to the buffer
::strncpy(cursor, data.c_str(), data.size());
cursor += (data.length() * sizeof(char));
*(reinterpret_cast<char*>(cursor)) = 0;
cursor += sizeof(char);
}

cursor гарантированно достаточно места, чтобы вместить все скопированные данные. А также data содержит только '\0' персонаж в конце.

Я хочу обновить эту функцию, чтобы использовать strcpyи убрать некрасивых. Вот что у меня есть:

void PackData(char*& cursor, const std::string& data) {
const int size = data.size() + 1;

std::copy_n(cursor, sizeof(int), reinterpret_cast<char*>(&size));
cursor += sizeof(int);
strcpy(cursor, data.c_str());
cursor += size;
}

Мой код работает нормально, но я хотел спросить, видит ли кто-нибудь какое-либо плохое поведение, которое я, возможно, пропустил?

1

Решение

Кто бы ни написал этот код, он понятия не имел, что делает. Что использование strncpy не имеет смысла, поскольку длина, переданная ему в вызове, является длиной источника, а не пункта назначения. И это reinterpret_cast в конце просто бросает cursor в первоначальном виде. Избавься от этой чепухи. Ваш код является хорошей заменой.

2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector