chẳng có gì là thần bí ở đây cả, như bạn @Phong_Ky_Vo đã nói, file văn bản cũng chỉ là file nhị phân, nhưng file nhị phân chưa chắc đã là file văn bản có nghĩa, mình xin nhấn mạnh từ có nghĩa vì mọi file đều có thể đọc dưới dạng file văn bản hoặc nhị phân. bản chất việc ghi kí tự xuống file văn bản là việc ghi mã code của kí tự đó trong bảng mã xuống file. Việc đọc lại file văn bản chính là dịch ngược mã code sang kí tự được mapping trong bảng mã.
Quay trở lại ví dụ của bạn:
void NhapMang(char *&arr, string str , int &n)
{
n = str.length();
arr = new char[n];
for (int i = 0; i < n;i++)
{
arr[i] = str[i];
}
}
ở hàm này bạn chỉ đơn giản copy từng char từ string sang array.
void GhiFile(ofstream &FileOut, char *arr, int n)
{
FileOut.open("OUTPUT.DAT", ios::out | ios::binary);
FileOut.write(arr, n*sizeof(char));
FileOut.close();
}
ở hàm này bạn sẽ ghi 1 block memory mà bạn đã copy từ hàm nhập xuống file, việc này cũng không khác gì so với cách mà thủ tục ghi file theo mode text đã làm, khi đó bạn dùng các texteditor để xem lại thì xem được nội dung file là bình thường.