답변:
std::string
이것에 대한 생성자가 있습니다 :
const char *s = "Hello, World!";
std::string str(s);
이 구문은에 문자 목록을 깊게 복사 s
하고 s
해서는 안됩니다 nullptr
. 그렇지 않으면 동작이 정의되지 않습니다.
str
는 변수 이름입니다. 그것은 아무것도 될 수있다 : S
, abc
, l
, I
, strHelloWorld
. 분명히 어떤 선택은 다른 것보다 낫습니다. 그러나이 예 str
에서는 상당히 수용 가능합니다.
이미 char *의 크기를 알고 있다면 이것을 대신 사용하십시오
char* data = ...;
int size = ...;
std::string myString(data, size);
strlen을 사용하지 않습니다.
편집 : 문자열 변수가 이미 있으면 assign ()을 사용하십시오.
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
생성자를 통해 전달하십시오.
const char* dat = "my string!";
std::string my_string( dat );
string.c_str () 함수를 사용하여 다른 방법으로 갈 수 있습니다.
std::string my_string("testing!");
const char* dat = my_string.c_str();
c_str()
반환const char*
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
사용자 정의 리터럴을 사용하는 새로운 방법을 언급하고 싶습니다 s
. 이것은 새로운 것은 아니지만 C ++ 14 표준 라이브러리에 추가 되었기 때문에 더 일반적입니다.
일반적인 경우에는 대체로 불필요합니다.
string mystring = "your string here"s;
그러나 넓은 문자열과 함께 자동을 사용할 수 있습니다.
auto mystring = U"your UTF-32 string here"s;
그리고 여기에 실제로 빛나는 곳이 있습니다.
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
방금 std::string(char*)
최상위 답변과 마찬가지로 생성자 를 사용하기 위해 MSVC2005로 고심하고 있습니다 . 필자가 항상 신뢰하는 http://en.cppreference.com/w/cpp/string/basic_string/basic_string 에서이 변형이 # 4로 표시되는 것을 알 수 있습니다 . , 오래된 컴파일러조차도 이것을 제공한다고 생각합니다.
이 생성자가 절대적으로 (unsigned char*)
인수 와 일치하는 것을 거부한다는 것을 깨닫는 데 너무 오래 걸렸습니다 ! std::string
인수 유형 과 일치하지 않는 데 대한 이해할 수없는 오류 메시지가 나타났습니다 . 그냥 std::string((char*)ucharPtr)
내 문제 를 해결 하면서 논쟁을 던졌습니다 ... 어!
char* data;
std::string myString(data);
data
초기화되지 않은 상태로 유지됩니다 (비어 있음).
Erik 외에 다른 사람이 이것을 언급하지 않은 이유는 확실하지 않지만 이 페이지 에 따르면 할당 연산자는 제대로 작동합니다. 생성자, .assign () 또는 .append ()를 사용할 필요가 없습니다.
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
=
(그리고 +=
). 이런 리터럴에서는 발생하지 않지만 char*
사물 에서만 발생 합니다. 이러한 보고서가 실제로 유출 되는지 여부에 대한 문제는 여기에서 설명합니다 . 그러나 destString = std::string(srcCharPtr);
valgrind 누출 보고서에 할당을 변경하면 사라졌습니다. YMMV.
Constructs an object of class basic_string and determines its initial string value from the array
. 버퍼 또는 포인터 소유권에 대해서는 가치가 없으며 아무것도 말하지 않습니다.