сравнить буфер с const char * в C ++ - PullRequest
4 голосов
/ 18 мая 2009

Как правильно C ++ сравнивать буфер памяти с константной строкой - strcmp(buf, "sometext")? Я хочу избежать ненужного копирования памяти в результате создания временных объектов std :: string.

Спасибо.

Ответы [ 5 ]

4 голосов
/ 18 мая 2009

strcmp хорош, если вы знаете содержимое вашего буфера. std::strncmp может дать вам немного больше защиты от переполнения буфера.

3 голосов
/ 18 мая 2009

Если вы просто проверяете равенство, вы можете использовать std::equal

#include <algorithms>

const char* text = "sometext";
const int len = 8; // length of text

if (std::equal(text, text+len, buf)) ...

конечно, это потребует дополнительной логики, если ваш буфер может быть меньше, чем текст

1 голос
/ 18 мая 2009

Я бы использовал memcmp, а в качестве последнего параметра - минимум двух размеров данных.

Также убедитесь, что эти 2 размера одинаковы, иначе вы просто сравниваете префикс самого короткого.

1 голос
/ 18 мая 2009

strcmp работает нормально, копия не сделана. В качестве альтернативы, вы также можете использовать memcmp. Однако, когда в C ++, почему бы не использовать std::string s?

0 голосов
/ 18 мая 2009

Вы можете сделать это, как,

const char* const CONST_STRING = "sometext";

strcmp(buf,CONST_STRING);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...