2013-03-13 3 views
43

std::string 변수를 사용자가 파일로 수락하려고합니다. 내가 write() 메서드를 사용하여 시도하고 파일에 씁니다. 그러나 파일을 열 때 문자열 대신 상자가 나타납니다.std :: string을 파일에 쓰는 방법은 무엇입니까?

문자열은 가변 길이 단일 단어입니다. std::string이 적합합니까? 아니면 문자 배열 등을 사용해야합니까?

ofstream write; 
std::string studentName, roll, studentPassword, filename; 


public: 

void studentRegister() 
{ 
    cout<<"Enter roll number"<<endl; 
    cin>>roll; 
    cout<<"Enter your name"<<endl; 
    cin>>studentName; 
    cout<<"Enter password"<<endl; 
    cin>>studentPassword; 


    filename = roll + ".txt"; 
    write.open(filename.c_str(), ios::out | ios::binary); 

    write.put(ch); 
    write.seekp(3, ios::beg); 

    write.write((char *)&studentPassword, sizeof(std::string)); 
    write.close();` 
} 
+3

코드를 표시하십시오. 일반적으로 _if_가 올바르게 사용 되었기 때문에'std :: string'이 이에 적합합니다. – Useless

+1

문자열 객체의 'payload'CONTENT를 저장해야합니다. (일반적으로 길이와 실제 내용을 가리키는 포인터를 포함합니다) –

답변

61

현재이 파일의 내용은 string입니다. 이 이진 데이터는 실제 데이터에 대한 포인터와 문자열의 길이를 나타내는 정수로 구성됩니다.

텍스트 파일에 쓰려면 가장 좋은 방법은 아마도 "out-file-stream"인 ofstream 일 것입니다. std::cout과 똑같은 동작을하지만 출력은 파일에 기록됩니다.

다음 예에서는 stdin에서 문자열 하나를 읽고 output.txt 파일에이 문자열을 씁니다. ofstream의 deconstructor 즉시 out이 범위를 벗어나으로 우리를 위해이 문제를 해결할 수 있습니다 out.close() 여기에 엄격하게이 켜지지 아니라고

#include <fstream> 
#include <string> 
#include <iostream> 

int main() 
{ 
    std::string input; 
    std::cin >> input; 
    std::ofstream out("output.txt"); 
    out << input; 
    out.close(); 
    return 0; 
} 

참고.

자세한 내용은 C++ 참조 - 참조 : 바이너리 형태로 파일에 기록해야하는 경우 지금 http://cplusplus.com/reference/fstream/ofstream/ofstream/

을, 당신은 문자열의 실제 데이터를 사용하여이 작업을 수행해야합니다. 이 데이터를 얻는 가장 쉬운 방법은 string::c_str()입니다. 그래서 당신은 사용할 수 있습니다

write.write(studentPassword.c_str(), sizeof(char)*studentPassword.size()); 
+0

std :: ios :: binary를 추가해야했습니다. 개행 문자에 문제가 없다. – Waddles

9

당신이 파일에 쓸 수있는 std::ofstream를 사용하는 가정, 다음 코드를 작성하는 std::string을 사람이 읽을 수있는 형태로 파일에 :

std::ofstream file("filename"); 
std::string my_string = "Hello text in file\n"; 
file << my_string; 
0

가에서 ios::binary를 제거하여 모드에서 귀하의 studentPassword.c_str() 대신 (char *)&studentPassword을 사용하십시오. write.write()

관련 문제