【发布时间】:2009-05-18 13:33:56
【问题描述】:
比较内存缓冲区和常量字符串的正确 C++ 方法是什么 - strcmp(buf, "sometext") ?我想避免由于创建临时 std::string 对象而导致不必要的内存复制。
谢谢。
【问题讨论】:
-
请使用 std::string 发布一些代码,说明您的问题。
标签: c++ string comparison
比较内存缓冲区和常量字符串的正确 C++ 方法是什么 - strcmp(buf, "sometext") ?我想避免由于创建临时 std::string 对象而导致不必要的内存复制。
谢谢。
【问题讨论】:
标签: c++ string comparison
如果您知道缓冲区的内容,则 strcmp 很好。 std::strncmp 可能会为您提供更多防止缓冲区溢出的安全性。
【讨论】:
如果您只是检查是否相等,您可以使用std::equal
#include <algorithms>
const char* text = "sometext";
const int len = 8; // length of text
if (std::equal(text, text+len, buf)) ...
当然,如果您的缓冲区可以小于文本,这将需要额外的逻辑
【讨论】:
strcmp 工作正常,没有复制。或者,您也可以使用memcmp。但是,在 C++ 中,为什么不使用std::strings?
【讨论】:
我将使用 memcmp,并作为最后一个参数,使用 2 种数据大小中的最小值。
还要检查以确保这 2 个尺寸相同,否则您只是在比较最短的那个的前缀。
【讨论】:
你可以这样做,
const char* const CONST_STRING = "sometext";
strcmp(buf,CONST_STRING);
【讨论】: