2009-05-18 14 views
4

メモリバッファを定数文字列と比較する正しいC++の方法は何ですか - strcmp(buf, "sometext")?一時的なstd :: stringオブジェクトを作成した結果、不要なメモリコピーを避けたい。バッファをC++のconst char *と比較する

ありがとうございました。

+0

いくつかのコードを投稿してください何を求めているのかを示すstd :: stringを使用します。 –

答えて

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

彼のデータはまだ文字列にはありません。彼はそれを1つに入れるのを避けようとしています。 –

+0

ありがとう、それを修正しました。 –

0

あなたは、あなたのバッファの内容を知っていれば

const char* const CONST_STRING = "sometext"; 

strcmp(buf,CONST_STRING); 
+0

上記のすべての答えから、私はC++/STLにそのような比較を行うツールがなく、単純なCアプローチを使用しなければならないことを理解していますか? – jackhab

+0

どのような比較ですか?実際のコードを投稿してください! –

4

strcmpのは良いですが、のようにそれを行うことがあります。 std::strncmpは、バッファオーバーフローに対するセキュリティを少し強化します。

関連する問題