C++에서 문자열을 사용하는 가장 좋은 방법은 무엇입니까? char
s의 C 스타일 배열? 또는 wchar_t
? CString
, std::basic_string
, std::string
, BSTR
또는 CComBSTR
?C++에서 문자열을 어떻게 처리합니까?
물론 이러한 각각의 응용 프로그램 영역이 있지만, 어쨌든, 당신이 가장 좋아하는 이유는 무엇입니까?
C++에서 문자열을 사용하는 가장 좋은 방법은 무엇입니까? char
s의 C 스타일 배열? 또는 wchar_t
? CString
, std::basic_string
, std::string
, BSTR
또는 CComBSTR
?C++에서 문자열을 어떻게 처리합니까?
물론 이러한 각각의 응용 프로그램 영역이 있지만, 어쨌든, 당신이 가장 좋아하는 이유는 무엇입니까?
표준에 따라 std :: string 또는 std :: wstring. 왜?
C 스타일의 문자 배열은 문제를 묻는 중입니다. std :: string.c_str()이 필요한 경우도 있습니다.하지만 솔직히 C의 가장 큰 위험 중 하나는 프로그래머가 char *를 사용하여 나쁜 일을하고 감는 것입니다. 버퍼 오버 플로우. 그냥하지 마.
wchar__t의 배열은 똑같은 크기입니다.
CString, BSTR 및 CComBSTR은 표준이 아니며 이식 가능하지 않습니다. 절대로 강제하지 않는 한 피하십시오. 최적으로 std :: string/std :: wstring을 필요에 따라 변환하면 매우 비싸지 않을 것입니다.
std :: string은 std :: basic_string의 하위 항목이지만 std :: string을 사용하는 것이 더 좋은 이유가 아니라면 예외가 아닙니다. 정말 좋다. 이 상황에서 컴파일러가 최적화를 처리하도록하십시오.
C 스타일의 char 배열이 그 자리를 차지하고 있지만 광범위하게 사용하면 한 번의 오류로 디버깅 시간을 낭비해야합니다. 우리는 우리의 (임베디드 개발 환경)에서 사용하기위한 맞춤 문자열 클래스를 가지고 있습니다.
항상 사용할 수있는 것은 아니므로 std :: string을 사용하지 않습니다.
std :: string 특별히 나열한 다른 API 중 하나를 사용하는 API를 호출해야하는 경우가 아니면
MFC를 사용할 수 있으면 CString을 사용하십시오. 그렇지 않으면 std :: string을 사용하십시오. 또한 std :: string은 표준 C++를 지원하는 모든 플랫폼에서 작동합니다.
실제로, 임베디드 컴파일러는
MFC를 강제로 사용하는 경우에만 권장합니다. 그것은 무시 무시한 것입니다. 그리고 그 위에, 어플리케이션 작성자가 만나는 것보다 많은 요구 사항이있는 프레임 워크입니다. 비용/혜택 비율의 오른쪽에 있지 않습니다. –
MFC는 때로는 꽤 고통 스러울 수 있지만 CString 클래스는 그렇게 나쁘지 않습니다. 또한 MFC 전체를 포함 할 필요가 없습니다.
std :: string !!
"표준"이라고하는 이유가 있습니다.
basic_string은 구현 세부 사항이므로 무시해야합니다.
BSTR & interop와 COM의 경우에만 interop의 경우에만 해당합니다.
언제든지 std::string
(또는 basic_string<TCHAR>
)을 사용합니다. 상당히 다재다능하며 (CStringT
), 유형 안전 (printf
과 달리)이 있으며 모든 플랫폼에서 사용할 수 있습니다.
기타, std :: wstring.
std :: string은 20 세기 기술입니다. 유니 코드를 사용하고 300 백만원 대신 60 억 명의 사람들에게 판매하십시오.
에서 사용할 수 있습니다. Windows 용으로 만 개발 한 경우를 제외하고 wstring은 실제로 유니 코드와 호환되지 않습니다. –
프로젝트 설정에 따라 wchar 또는 char에 대한 정의 인 TCHAR을 사용하고 싶습니다. 필요한 기능 및 유형에 대한 모든 관련 정의를 찾을 수있는 tchar.h에 정의되어 있습니다.
std :: string 및 std :: wstring, 가능하면 할 수 있습니다.
완벽하지는 않지만 잘 테스트되고 잘 이해되며 매우 다양합니다. 표준 라이브러리의 다른 부분과도 잘 어울립니다.이 라이브러리는 거대한 보너스이기도합니다.
또한 언급 할만한 가치가 있습니다. stringstreams.
유니 코드는 미래입니다. char * 및 std :: string은 사용하지 마십시오. 제발) 나는 현지화 버그에 질려합니다.
std :: string에서 유니 코드 문자열을 보유하는 것이 완벽하게 가능합니다. UTF-8로 인코딩하면됩니다. 실제로 다른 운영 체제를 대상으로하는 경우 wstring을 사용하는 것보다 훨씬 좋은 솔루션입니다. –
그래,하지만 이것은 보관하기에 좋다. 'char' 기반 연산자 대신 문자 기반 연산을위한 메서드를 롤백해야합니다. –
표준 : : 문자열이없는 것보다는 낫다, 그러나 나는 선택의 여지가 때
그 문자열 스트림은 무엇입니까 –
부스트 StringAlgo 라이브러리는 그 대부분을 제공합니다. –
... 조인은 분할과 같은 기본 기능을 실종 성가신 심지어 괜찮은 형식으로 호출이다 (나는 보통하지 않습니다) , 나는 UTF-8 인코딩 (및 UTF8 CPP 라이브러리의 도움으로 표준 : : 문자열을 사용하는 경향이 있습니다. 나는 std :: string을 그렇게 좋아하지 않지만 적어도 표준적이고 휴대 가능합니다.
Unfortunatelly, 거의 모든 실생활 프로젝트에서 내부 문자열 클래스가 있습니다. 실제로 대부분 std :: string보다 좋지만 여전히 ...
이전에이 라이브러리를 보지 못했지만 유용 할 것 같습니다. –
나는 Qt 개발자이기 때문에 가능한 QString을 사용하는 경향이있다. :)
유니 코드 호환, 스레드 안전 암시 적 공유 (일명 카피) 및 실용적인 실제 문제 (분할, 조인, 바꾸기 등)를 해결하도록 설계된 API가 제공됩니다. 정규 표현식), 숫자로의 변환/변환 ...)
QString을 사용할 수 없다면 std :: wstring. C로 붙어 있다면 glib GString을 권합니다.
응용 프로그램에 따라 다릅니다 ... 저는 광범위한 임베디드 프로그래밍을 수행했으며 일반적으로 문자 배열을 사용합니다. 새로운 문자열 객체를 생성하는 것은 대부분의 문자열 조작에 낭비되는 클럭 사이클을 필요로합니다.
다음은 C++에서 가장 일반적인 종류의 문자열을 비교하고 그 사이를 변환하는 방법입니다.Unraveling Strings in Visual C++
우수 기사 – Casebash
MFC를 사용하는 경우 CString을 사용하십시오. 그렇지 않으면 나는 대부분의 다른 사람들과 동의한다 : std :: string 또는 std :: wstring 줄곧.
Microsoft는 std :: basic_string < TCHAR>를 MFC의 최신 업데이트에 추가하여 세계를 크게 좋아할 수있었습니다.
FAQ http://stackoverflow.com/faq Ra를 읽어보십시오. 이것은 토론이 많이 필요한 자유로운 질문의 훌륭한 예입니다. Downvoted. –
나는 Onorio에 동의하지 않습니다. 모든 선택 중에서 어느 문자열 시스템을 사용해야할지 모르는 사람에게는 큰 문제입니다. Onorio의 downvote를 취소하기 위해 Upvoted :) –
당신은 멀티 플랫폼 솔루션을 찾고 있는지 또는 Windows 전용 솔루션을 찾고 있는지 명시해야합니다. 이건 매우 중요합니다. – sorin