문제

내가 사용할 필요 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!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top