문제
내가 사용할 필요 std::string
데이터를 저장하여 검색 fgets()
.이를 위해 내가 필요로 변환하 char*
반환 값 fgets()
로 std::string
를 저장하는 훌륭한 기능들을 가지고 있습니다.어떻게 할 수 있습니까?
해결책
std::string
이것에 대한 생성자가 있습니다.
const char *s = "Hello, World!";
std::string str(s);
당신의 것입니다 char *
그렇지 않습니다 NULL
, 또는 그렇지 않으면 동작이 정의되지 않습니다.
다른 팁
이미 char*의 크기를 알고 있다면 대신 사용하십시오.
char* data = ...;
int size = ...;
std::string myString(data, size);
이것은 strlen을 사용하지 않습니다.
편집 : 문자열 변수가 이미 존재하는 경우 antart ()를 사용하십시오.
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
를 사용해야 한다는 std::string 데이터를 저장하여 검색 fgets().
를 사용하는 이유 fgets()
프로그래밍 하는 경우 C++?왜 std::getline()
?
대부분의 답변은 이야기합니다 구성 std::string
.
이미 건설 된 경우 과제 연산자 만 사용하십시오.
std::string oString;
char* pStr;
... // Here allocate and get character string (e.g. using fgets as you mentioned)
oString = pStr; // This is it! It copies contents from pStr to oString
생성자를 통해 전달하십시오.
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();
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << 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;
char* data;
std::string myString(data);
Erik 외에 아무도 이것을 언급하지 않은 이유는 확실하지 않지만 이 페이지, 할당 연산자는 잘 작동합니다. 생성자, .assign () 또는 .append ()를 사용할 필요가 없습니다.
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
방금 사용하기 위해 MSVC2005로 어려움을 겪고 있습니다 std::string(char*)
최상위 답변과 같은 생성자. 이 변형이 항상 트러스트에서 #4로 나열된 것을 볼 수 있습니다. http://en.cppreference.com/w/cpp/string/basic_string/basic_string , 나는 오래된 컴파일러조차 이것을 제공한다고 생각합니다.
이 생성자의 절대적으로 일치하는 것을 거부한다는 것을 깨닫는 데 너무 오래 걸렸습니다. (unsigned char*)
논쟁으로! 일치하지 않는 것에 대한 이해할 수없는 오류 메시지를 받았습니다. std::string
내가 목표로 삼은 것이 아니었던 인수 유형. 그냥 논쟁을 던지는 것입니다 std::string((char*)ucharPtr)
내 문제를 해결했습니다 ... duh!