現在のコードの代わりに:
FILE *sortie;
char fichier[256];// <--- HERE s my char table
int main(int argc, char *argv[])
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
strcat(fichier, "\\fichierlog.txt");
例えばする
auto main() -> int
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
std::wstring fichier( MAX_PATH, L'\0' );// <--- HERE s my char table
const DWORD len = GetCurrentDirectory( fichier.size(), &fichier[0] );
if( len == 0 || len >= fichier.size() ) { throw std::runtime_error( "GetCurrentDirectory failed." ); }
fichier.resize( len );
fichier += L"/fichierlog.txt";
std::ifstream sortie( fichier );
これにより、次の 3 つの問題が修正されます。
Unicode (おそらく Visual Studio プロジェクト) としてコンパイルしていますが、コードは Windows ANSI API 用です。
C++ コンパイラを使用していますが、コードは低レベル C です。
最大パス長に対してバッファーが小さすぎます。連結のバッファー オーバーランの可能性があります。
ifstream
ワイド文字列を受け入れるコンストラクターは、Microsoft の拡張機能であることに注意してください。ただし、C++17 の標準ライブラリへのファイル システムの追加により、Windows C++ コンパイラでは実質的に必要になります。