string 형 함수를 string
사용하여 C ++ 를 char 배열로 변환하는 것은 매우 간단합니다 . 그러나 반대 방법은 무엇입니까?c_str
strcpy
: 내가 좋아하는 문자 배열이 가지고 char arr[ ] = "This is a test";
에 변환 등을 할 :
string str = "This is a test
.
string 형 함수를 string
사용하여 C ++ 를 char 배열로 변환하는 것은 매우 간단합니다 . 그러나 반대 방법은 무엇입니까?c_str
strcpy
: 내가 좋아하는 문자 배열이 가지고 char arr[ ] = "This is a test";
에 변환 등을 할 :
string str = "This is a test
.
답변:
이 string
클래스에는 NULL로 끝나는 C- 문자열을 취하는 생성자가 있습니다.
char arr[ ] = "This is a test";
string str(arr);
// You can also assign directly to a string.
str = "This is another string";
// or
str = arr;
"hello world"
은 배열입니다. sizeof("hello world")
이것을 사용 하면 포인터의 크기 (4 또는 8)가 아닌 배열의 크기 (12)를 얻을 수 있습니다.
string
와하지 않습니다 일 생성자는 예를 들어, 전달 된 인수 문자열은 선언 unsigned char * buffer
, 바이트 스트림 라이브러리를 처리에서 매우 일반적인 것을.
std::string str(buffer, buffer+size);
있지만 std::vector<unsigned char>
이 경우에는 고정하는 것이 좋습니다 .
str
가 아닙니다 . 문자열 변수의 이름입니다. 다른 변수 이름 (예 :)을 사용할 수 있습니다 string foo(arr);
. 암시 적으로 호출되는 std :: string의 생성자가 변환을 수행합니다.
다른 해결책은 다음과 같습니다.
char arr[] = "mom";
std::cout << "hi " << std::string(arr);
추가 변수를 사용하지 않습니다.
cout << "test:" + std::string(arr);
string aString(someChar);
입니까 아니면 여기서 사용할 수있는 열쇠 입니까?
최고 투표 답변에서 누락 된 작은 문제가 있습니다. 즉, 문자형 배열은 0을 포함 할 수 있습니다. 위에서 지적한대로 단일 매개 변수와 함께 생성자를 사용하면 일부 데이터가 손실됩니다. 가능한 해결책은 다음과 같습니다.
cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;
출력은 다음과 같습니다
123
123 123
std::string
이진 데이터의 컨테이너로 사용 하고 있고 배열에 '\ 0'이 포함되어 있지 않다고 확신 할 수없는 경우에 더 나은 대답 입니다.
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int main ()
{
char *tmp = (char *)malloc(128);
int n=sprintf(tmp, "Hello from Chile.");
string tmp_str = tmp;
cout << *tmp << " : is a char array beginning with " <<n <<" chars long\n" << endl;
cout << tmp_str << " : is a string with " <<n <<" chars long\n" << endl;
free(tmp);
return 0;
}
밖:
H : is a char array beginning with 17 chars long
Hello from Chile. :is a string with 17 chars long
const char*
하므로 문자열 리터럴 또는 char 배열 (부패되는)을 전달할 수 있습니다.