続・またマルチバイト文字列 (2)
d:id:youandi:20081208#p3
マルチバイト文字列処理というよりも、strcpy_s/strncpy_sの使い方メモ。
今やっている作業で、strncpy_sを使っているコードがあって、どう書くのが正しいのか調べる。
// 当然ながらプロジェクトの文字セットの設定は「マルチバイト文字を使用する」で。 #include <stdio.h> #include <locale.h> #include <tchar.h> #include <windows.h> #include <shlwapi.h> #include <strsafe.h> #pragma comment( lib, "shlwapi.lib" ) void Test() { const int CHAR_SIZE = 8; const TCHAR szMBS[] = _T("あいうえおかきくけこ"); TCHAR szText[ CHAR_SIZE ] = { 0 }; TCHAR* pDst = &szText[ 0 ]; (void)::_tsetlocale( LC_ALL, _T("japanese") ); // 追加分 ::_tcscpy_s( szText, szMBS ); ::_tcscpy_s( pDst, CHAR_SIZE - 1, szMBS ); ::_tcsncpy_s( szText, szMBS, _TRUNCATE ); ::_tcsncpy_s( pDst, CHAR_SIZE - 1, szMBS, _TRUNCATE ); ::_stprintf_s( szText, _T("%s"), szMBS ); ::_stprintf_s( pDst, CHAR_SIZE - 1, _T("%s"), szMBS ); ::_sntprintf_s( szText, _TRUNCATE, _T("%s"), szMBS ); ::_sntprintf_s( pDst, CHAR_SIZE - 1, _TRUNCATE, _T("%s"), szMBS ); // 以前の分 ::_tcsncpy( szText, szMBS, _countof( szText ) - 1 ); ::lstrcpyn( szText, szMBS, _countof( szText ) ); ::StrCpyN( szText, szMBS, _countof( szText ) ); ::StringCbCopy( szText, sizeof( szText ), szMBS ); ::StringCchCopy( szText, _countof( szText ), szMBS ); ::_sntprintf( szText, _countof( szText ) - 1, _T("%s"), szMBS ); ::wnsprintf( szText, _countof( szText ), _T("%s"), szMBS ); ::StringCbPrintf( szText, sizeof( szText ), _T("%s"), szMBS ); ::StringCchPrintf( szText, _countof( szText ), _T("%s"), szMBS ); ::fgetc( stdin ); }