Как определить длину std :: string, которая содержит & quot; \ 0 & quot; в его середине?

Я пишу приложение C ++, которое получает входные данные из сокета. Этот ввод поступает как строка необработанных данных, поэтому в его теле содержится много символов «\ 0».

Мой вопрос, как я могу определить его длину / размер, не останавливаясь на «\ 0», чтобы я мог прочитать полный ответ сокета? Длина ответа — 148, но size () возвращает 2.

0

Решение

size() возвращает фактическую длину строки и не учитывает нулевые байты для завершения строки. Причина, по которой вы получаете размер два, заключается в том, что существуют разные способы установки значения строки, и некоторые из них делать считать нулевые байты символом конца строки. Таким образом, вы по ошибке установили значение строки как строку из двух символов вместо того, чтобы установить ее для хранения полных данных ответа, и size() точно отражает эту ошибку.

Решение состоит в том, чтобы инициализировать или установить строку, используя метод, который не учитывает нулевые байты:

char buffer[] = "abcd\0efg";

std::string s(buffer, 8);
std::cout << s.size() << '\n'; // outputs "8"
std::string s2(buffer);
std::cout << s2.size() << '\n'; // outputs "4"
5

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


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