Home > Tips > WriteConsole()で長い文字列を渡すと表示されない場合の対処法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #define WIN32_LEAN_AND_MEAN #define UNICODE #define _UNICODE #include<tchar.h> #include<windows.h> #include<locale.h> #include<string> typedef std::basic_string< TCHAR >tstring; bool write( const VOID *buffer, DWORD buffer_size, LPDWORD written_chars){ return WriteConsole(::GetStdHandle(STD_OUTPUT_HANDLE),buffer,buffer_size,written_chars,NULL); } int main(){ _tsetlocale(LC_ALL,_tsetlocale(LC_CTYPE,_T( "" ))); TCHAR rain[]=_T( " / / / // / / / / / / / /" ); tstring msg(rain); for ( size_t i=0;i<600;++i){ msg.append(rain); } DWORD written_chars=0; write(msg.c_str(),msg.length(),&written_chars); if (written_chars!=msg.length()){ _tprintf(_T( "\n鹿グモで停止中" )); } else { _tprintf(_T( "\n雨ダイヤ実施中" )); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #define WIN32_LEAN_AND_MEAN #define UNICODE #define _UNICODE #include<tchar.h> #include<windows.h> #include<locale.h> #include<string> typedef std::basic_string< TCHAR >tstring; bool write( const VOID *buffer, DWORD buffer_size, LPDWORD written_chars){ bool result= false ; DWORD written=0; const DWORD write_buffer_size=2048; //分割して出力 const TCHAR * ptr= static_cast < const TCHAR *>(buffer); const TCHAR * end=ptr+lstrlen( static_cast < const TCHAR *>(buffer)); for ( DWORD write_size=write_buffer_size;ptr<end;ptr+=written){ if (write_size> static_cast < DWORD >(end-ptr))write_size=end-ptr; result=::WriteConsole(::GetStdHandle(STD_OUTPUT_HANDLE),ptr,write_size,&written,NULL); } if (written_chars)*written_chars=ptr- static_cast < const TCHAR *>(buffer); return result; } int main(){ _tsetlocale(LC_ALL,_tsetlocale(LC_CTYPE,_T( "" ))); TCHAR rain[]=_T( " / / / // / / / / / / / /" ); tstring msg(rain); for ( size_t i=0;i<600;++i){ msg.append(rain); } DWORD written_chars=0; write(msg.c_str(),msg.length(),&written_chars); if (written_chars!=msg.length()){ _tprintf(_T( "\n鹿グモで停止中" )); } else { _tprintf(_T( "\n雨ダイヤ実施中" )); } } |