[ C++ fstream write ] string 작성시 마지막 글자에 \0을 삽입하려면 어떻게 해야할까요?
조회수 1546회
아래 코드는 파일에 쓰여있는 Customer라는 글자를 Admin이라는 글자로 바꾸는 코드입니다.
끝이 NULL로 잘 처리가 안 된것인지 Admin이 아니라 기존의 텍스트(Customer)와 겹쳐서 Adminmer가 되어버립니다.
Customer의 글자수가 더 많기 때문에 Admin에서 Customer로 바뀌는데는 지장이 없습니다.
바꾸기 전의 글자수가 바꾸고 싶은 글자수보다 이처럼 적은 경우는 문자의 뒷 부분이 기존 글씨와 글씨가 겹치는데 어떻게 해야할까요?
NULL을 제대로 삽입을 해야할 거 같긴한데.. 어찌해야할지 모르겠네요.
(Admin + 띄어쓰기가 아니라 딱 Admin까지만 나오게 하고 싶습니다.)
fstream fs;
fs.open(getLoginedID() + ".dat", /*fstream::binary |*/ fstream::in | fstream::out);
string str((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
size_t pos = str.find("Customer");
if (pos != string::npos) {
cout << "string found at position: " << int(pos) << endl;
fs.seekp(pos);
fs << "\nAdmin";
fs.put('\0');
//fs.write("\nAdmin\0", 7); 이 방법으로도 되지 않음
}
fs.close();
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
성능이 별로 중요하진 않아서 다음과 같이 해결하였습니다. 코드는 의도대로 잘 돌아가지만 다른 문제를 갖고있는지는 잘 모르겠네요 ㅎㅎ
ifstream userInfoFile; ofstream tempFile; string strTemp; try { openFileToRead(userInfoFile, (id + ".dat").c_str()); openFileToWrite(tempFile, "temp.dat"); while (userInfoFile >> strTemp) { if (strTemp == "Customer") { strTemp = "Admin";; } strTemp += "\n"; tempFile << strTemp; } } catch (string err) { cerr << err << endl; exit(EXIT_FAILURE); } userInfoFile.close(); tempFile.close(); remove((id + ".dat").c_str()); rename("temp.dat", (id + ".dat").c_str());
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력