2009-05-18 2 views
4

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

Спасибо.

+0

Пожалуйста, пост кода используя std :: string, которая иллюстрирует то, о чем вы просите. – 2009-05-18 13:35:47

ответ

3

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

#include <algorithms> 

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

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

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

1

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

+1

Если я конвертирую buf в std :: string, содержимое буфера будет скопировано в строковый объект - я хочу избежать, так как после сравнения я не имею к этому никакого отношения. – jackhab

+0

strncmp немного безопаснее, но вы должны убедиться в том, что для «n» нужно ввести правильное значение. Альтернативно, если вы знаете, что буфер длиннее, чем константная строка, с которой вы сравниваете, то strcmp в порядке. –

1

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

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

+0

Его данные еще не в строчке - он пытается не помещать его в один. –

+0

Спасибо, исправил. –

0

Вы можете сделать это нравится,

const char* const CONST_STRING = "sometext"; 

strcmp(buf,CONST_STRING); 
+0

Из всех ответов выше я понимаю, что у C++/STL нет инструментов для такого сравнения, и нужно использовать простой подход C? – jackhab

+0

Какое сравнение? Пожалуйста, напишите какой-нибудь фактический код! – 2009-05-18 13:52:24

4

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

 Смежные вопросы

  • Нет связанных вопросов^_^