Visual C++(Visual Studio 2022)で開発を行っています
Win10環境で動作していたプログラムがあり、今回OSをWindows11に更新して動作を確認したところ
カレントディレクトリとiniファイル名称を結合する処理がうまくいかなくなっていました。
具体的には以下のような処理となっています。
なお、プロジェクトで「Unicode 文字セットを使用する」にしています。
#define INI_FILE_NAME _T("TEST.ini") // iniファイル名 TCHAR lpTcCurDir[1024]; // カレントディレクトリ TCHAR lpTcIniFilePath[1024]; // iniファイルのフルパス GetCurrentDirectory(1024, lpTcCurDir); // カレントディレクトリ取得 _stprintf_s(lpTcIniFilePath, _T("%s\\%s"), lpTcCurDir, INI_FILE_NAME); //パスの結合
前述のとおりプロジェクトで「Unicode 文字セットを使用する」に設定しており、TCHARはワイド文字列扱いとなっているので、試しに以下の通り%sの部分を%lsに変更したところうまく動作しました。
_stprintf_s(lpTcIniFilePath, _T("%ls\\%ls"), lpTcCurDir, INI_FILE_NAME);
動作するようにはなったのですが2点疑問に思い、わかる方がいればご教授願いたく思います。
(1)前環境(Windows10)ではなぜ動作していたのか
(2)_T("%s")の部分は「Unicode 文字セットを使用する」にしていれば自動的に%lsとして扱われないのか

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