前提
関数Writefileを使い、テイストファイルへint型配列に保持してある数値を書き込もうとしています。
疑問点
以下のソースコードを実行すると張り付けた写真のような出力結果になってしまい、望んだ数値が出力されません。
このような出力結果になってしまう原因とその解決策について知りたいです。
発生している問題・エラーメッセージ
エラーはないです。
該当のソースコード
c++
1 2#include<stdio.h> 3#include<windows.h> 4#include<tchar.h> 5#include<WinUser.h> 6#include <string> 7 8#include <stdlib.h> 9#include<iostream> 10using namespace std; 11 12 13 14int main(void) { 15 16 HANDLE hfile; 17 int* p; 18 int array[10], length; 19 DWORD dwWriteSize; 20 21 p = array; 22 length = 10; 23 24 for (size_t i = 0; i < length; i++) 25 { 26 p[i] = i; 27 cout << p[i] << endl; 28 } 29 30 // ファイルオープン 31 hfile = CreateFile( 32 _T("テスト.text"), // ファイルの名前 33 GENERIC_WRITE, // 書き込みモード 34 0, 35 NULL, 36 CREATE_ALWAYS, // 上書き保存 37 FILE_ATTRIBUTE_NORMAL, 38 NULL 39 ); 40 if (hfile == INVALID_HANDLE_VALUE) { 41 MessageBox(NULL, _T("ファイルの作成に失敗しました。"), _T("エラー"), MB_OK); 42 return 1; 43 } 44 45 // ファイルへ書き込み 46 WriteFile(hfile, p, (DWORD)sizeof(int) * length, &dwWriteSize, NULL); 47 48 // ファイルのクローズ 49 CloseHandle(hfile); 50 51 return 0; 52}
出力結果
試したこと
配列の中身は問題なさそうなのでWritefileの引数に問題があると考えられますが、何が問題なのか分かりません。
補足情報(FW/ツールのバージョンなど)
開発環境: Visual Studio 2019
OS: Windows 11
『数値』と『数字』の違いは理解してますか?
>Writefileの引数に問題があると考えられますが
数値としては正しくファイルに書き込みされていると思いますよ。
バイナリエディタで見るか、HexDumpなりで確認できると思いますが。
普通にテキストファイルとして出力したいのであれば、数値→数字変換したあとに書き出してください。
WriteFile()で…となると、変換したバッファとか気をつける必要がありますが。
そもそも、何も考えずに数値→数字変換しただけだと、配列の1つ目と2つ目の区別がつかないかも知れませんが。

問題は以下の2つです。
(1) 数値型を文字列型のように整形せずに出力している点
(2) テキストではなくバイナリで出力している点
対策はいくつかありますが、WIN32APIだと(1)の整形や(2)のテキスト出力は自前でやる必要があります。
WIN32APIを直に使用せずC++標準ライブラリを使うなら、<fstream>を使えば可能です。
(1)の整形のみC++標準ライブラリを使うのであれば、<sstream>が使用できます。
「数値」と「数字」の違いについて意識していませんでした。ご丁寧に回答していただきありがとうございました。解決しました。

回答2件
あなたの回答
tips
プレビュー