2009-05-18 3 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 s를 사용하지 않으시겠습니까?

+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

어떤 비교가 있습니까? 실제 코드를 게시하십시오! –

4

을 strcmp이 좋다. std::strncmp은 버퍼 오버 플로우에 대해 좀 더 많은 보안을 제공 할 수 있습니다.

관련 문제