Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将缓冲区与C+中的const char*进行比较+; P>比较内存缓冲区与常数字符串的正确C++方式是什么? STRCMP(BUF,SMOTEXT)?我希望避免由于创建临时std::string对象而导致不必要的内存复制_C++_String_Comparison - Fatal编程技术网

将缓冲区与C+中的const char*进行比较+; P>比较内存缓冲区与常数字符串的正确C++方式是什么? STRCMP(BUF,SMOTEXT)?我希望避免由于创建临时std::string对象而导致不必要的内存复制

将缓冲区与C+中的const char*进行比较+; P>比较内存缓冲区与常数字符串的正确C++方式是什么? STRCMP(BUF,SMOTEXT)?我希望避免由于创建临时std::string对象而导致不必要的内存复制,c++,string,comparison,C++,String,Comparison,谢谢 strcmp工作正常,不复制。或者,您也可以使用。但是,在C++中,为什么不使用 STD::String < /Calp>S.< /P> < P>我将使用MEMCMP,最后一个参数使用2个数据大小的最小值。p> 还要检查以确保这两种尺寸相同,否则您只是比较最短尺寸的前缀 你可以这样做 const char* const CONST_STRING = "sometext"; strcmp(buf,CONST_STRING); 如果您知道缓冲区的内容,strcmp是好的。可能会为您提供多一

谢谢

strcmp
工作正常,不复制。或者,您也可以使用。但是,在C++中,为什么不使用<代码> STD::String < /Calp>S.< /P> < P>我将使用MEMCMP,最后一个参数使用2个数据大小的最小值。p> 还要检查以确保这两种尺寸相同,否则您只是比较最短尺寸的前缀

你可以这样做

const char* const CONST_STRING = "sometext";

strcmp(buf,CONST_STRING);

如果您知道缓冲区的内容,strcmp是好的。可能会为您提供多一点防止缓冲区溢出的安全性。

如果您只是检查是否相等,则可以使用

#包括
const char*text=“sometext”;
常数int len=8;//文本长度
如果(std::equal(text,text+len,buf))。。。

当然,如果您的缓冲区可以小于文本,这需要额外的逻辑。请使用std::string发布一些代码,说明您的问题。如果我将buf转换为std::string,缓冲区内容将复制到string对象中-我希望避免,因为在比较之后,我与之无关。strncmp稍微有些不同更安全,但必须确保为“n”输入正确的值。或者,如果您知道缓冲区比要比较的常量字符串长,那么strcmp就可以了。从上面的所有答案中,我了解到C++/STL没有工具进行这样的比较,必须使用简单的C方法?他的数据还不在字符串中-他试图避免将其放入字符串中。
#include <algorithms>

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

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