c_str 함수의 용도는 무엇인가?
나는 이해한다c_str
null이 될 수도 있고 아닐 수도 있는 문자열을 null이 아닌 문자열로 변환한다.
이게 사실이야?몇 가지 예를 들어 주시겠습니까?
c_str
a를 반환하다const char*
이는 null-terminated 문자열(즉, C-style 문자열)을 가리킨다.a의 「내용」을 통과시키고 싶을 때 유용하다.std::string
C 스타일 스트링으로 작업할 수 있을 것으로 예상하는 기능.
예를 들어 다음 코드를 고려하십시오.
std::string string("Hello world!");
std::size_t pos1 = string.find_first_of('w');
std::size_t pos2 = static_cast<std::size_t>(std::strchr(string.c_str(), 'w') - string.c_str());
if (pos1 == pos2) {
std::printf("Both ways give the same result.\n");
}
그것을 행동으로 보여라.
주의:
¹ 이것은 완전히 사실이 아니다.std::string
(C 문자열과 달리)는\0
캐릭터이 경우 반환 값을 받는 코드c_str()
현이 실제보다 더 짧다고 생각하도록 속일 것이다, 왜냐하면 현은 해석할 것이기 때문이다.\0
끈의 끝으로
C++에서는 문자열을 다음과 같이 정의하십시오.
std::string MyString;
대신에
char MyString[20];
.
C++ 코드를 쓰는 동안 파라미터로 C 문자열을 필요로 하는 C 함수를 만나게 된다.
아래와 같이:
void IAmACFunction(int abc, float bcd, const char * cstring);
이제 문제가 생겼다.당신은 C++로 작업하고 있고std::string
문자열 변수하지만 이 C 함수는 C 스트링을 요구하고 있다.어떻게 변환하시겠습니까?std::string
표준 C 스트링으로?
다음과 같은 경우:
std::string MyString;
// ...
MyString = "Hello world!";
// ...
IAmACFunction(5, 2.45f, MyString.c_str());
이런 것이다.c_str()
에 대한 것이다.
참고:std::wstring
줄들c_str()
a를 반환하다const w_char *
.
C/C++ 프로그래밍에는 C 문자열과 표준 문자열의 두 종류가 있다.With the<string>
헤더, 우리는 표준 문자열을 사용할 수 있다.반면에 C 현은 그저 평범한 차자의 배열일 뿐이다.그래서 표준 문자열을 C 문자열로 변환하기 위해서 우리는 C 문자열을 사용한다.c_str()
기능을 발휘하다
예를 들면
// a string to a C-style string conversion//
const char *cstr1 = str1.c_str();
cout<<"Operation: *cstr1 = str1.c_str()"<<endl;
cout<<"The C-style string c_str1 is: "<<cstr1<<endl;
cout<<"\nOperation: strlen(cstr1)"<<endl;
cout<<"The length of C-style string str1 = "<<strlen(cstr1)<<endl;
그리고 그 결과물은,
Operation: *cstr1 = str1.c_str()
The C-style string c_str1 is: Testing the c_str
Operation: strlen(cstr1)
The length of C-style string str1 = 17
c_str()는 C++ 문자열을 본질적으로 null 종료된 바이트 배열인 C-style 문자열로 변환한다.C형 문자열을 예상하는 함수(예: Win32 API, POSIX 스타일 함수 등)로 C++ 문자열을 전달할 때 사용한다.
만드는 데 쓰인다.std::string
null이 종료되어야 하는 C 코드와 상호 운용 가능char*
.
대부분의 Old c++ 및 c 함수는 문자열을 처리할 때const char*
.
STL과 함께std::string
,string.c_str()
에서 변환할 수 있도록 도입되었다.std::string
로const char*
.
즉, 버퍼를 변경하지 않겠다고 약속하면 읽기 전용 문자열 내용을 사용할 수 있게 된다.PROMMITY = 항상 문자*
오은선은 여기에 내 선택을 추가해야 한다. 두 프로그램 사이에서 전송하는 문자열 오브제를 인코딩/디코딩할 때 이것을 사용할 것이다.
python에서 base64encode를 사용한다고 가정해 봅시다. 그리고 그것을 c++로 디코딩하고 싶은 겁니다.일단 문자열이 있으면 c++의 base64decode에서 해독한다.플로트의 배열로 되돌리려면 여기서 해야 할 일은
float arr[1024];
memcpy(arr, ur_string.c_str(), sizeof(float) * 1024);
내 생각에 이것은 꽤 흔한 사용법이다.
const char* c_str() const;
문자열 개체의 현재 값을 나타내는 null-terminated 문자 시퀀스(즉, C - 문자열)가 포함된 배열로 포인터를 반환한다.
이 배열은 문자열 객체의 값을 구성하는 동일한 문자 시퀀스와 종료 시 추가 종료 null 문자('\0')를 포함한다.
std::string str = "hello";
std::cout << str; // hello
printf("%s", str); // ,²/☺
printf("%s", str.c_str()); // hello
참조URL: https://stackoverflow.com/questions/7416445/what-is-use-of-c-str-function
'programing' 카테고리의 다른 글
일반 자바스크립트의 VueJS (0) | 2022.05.15 |
---|---|
create-nuxt-app 버전을 확인하고 업그레이드하는 방법 (0) | 2022.05.15 |
MVC 프로젝트에서 MapState가 Vue3와 함께 Vuex4를 찾을 수 없음 (0) | 2022.05.15 |
Vuex를 사용하는 글로벌 이벤트 버스 - 항상 가입자에게 알림 (0) | 2022.05.15 |
Vue.js 2에서 이벤트 버스를 사용하여 사용자 지정 이벤트로 데이터를 전달하는 방법 (0) | 2022.05.15 |