文字列バッファの改行コードを削除し、ダブル NULL 文字列に変換します。
ダブル NULL 文字列とは次の形式です。(戻る)
1行目の文字列\0 2行目の文字列\0 3行目の文字列\0 \0 ↑ 最後がダブル NULL 文字(\0)になる文字列です。
プロトタイプ宣言
LPTSTR funcCRLFString( LPTSTR lpString // 文字列へのポインタ );
サンプル
// 文字列バッファの改行コードを削除 extern LPTSTR funcCRLFString( LPTSTR lpString ) { LPTSTR lpDest = lpString; LPTSTR lpTail = lpString; while ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){ lpTail++; } if ( *lpTail != TEXT('\0') ){ while ( *lpTail != TEXT('\0') ){ if ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){ while ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){ lpTail++; } *lpDest++ = TEXT('\0'); } else{ *lpDest++ = *lpTail++; } } *lpDest++ = TEXT('\0'); *lpDest++ = TEXT('\0'); } return lpString; } // 使用例 int main( void ) { HWND hWnd = GetDesktopWindow(); DWORD dwLine = 0; LPTSTR lpClip; LPTSTR lpGets; if ( (lpClip = funcClipGets(hWnd)) != NULL ){ for ( lpGets = funcCRLFString(lpClip) ; *lpGets != TEXT('\0') ; lpGets++ ){ printf( TEXT("%05u %s\r\n"), ++dwLine, lpGets ); lpGets += lstrlen( lpGets ); } // 使用後は必ず解放 GlobalFree( lpClip ); return 0; } printf( TEXT("クリップボードが開けないか、またはデータがありません。\n") ); return 1; }
- lpString にダブル NULL に変換したい文字列を指定します。
- 空行は削除されて改行コードを NULL 文字(\0)に置き換えます。
- そして最後にもう一つの NULL 文字(\0)が追加されます。
- つまり、最後は NULL 文字(\0)が 2 つ続きます。
実行結果(実行前)
1行目の文字列\r\n 2行目の文字列\r\n 3行目の文字列\r\n \r\n \r\n 6行目の文字列\r\n \0
実行結果(実行後)
1行目の文字列\0 2行目の文字列\0 3行目の文字列\0 6行目の文字列\0 \0
- 最後にもう一つの NULL 文字(\0)が追加されます。
- つまり、最後は NULL 文字(\0)が 2 つ続く事になります。
注意事項
- 改行がない場合は、バッファに\0分が1つ増えるため要注意。(funcDupStringで確保したなら安全)
- lpString の文字列は funcCRLFString()関数の内部で NULL 文字(\0)を書き込み行単位で分離します。
- よって LPCTSTR の文字列は渡せません。
- 文字列内容を書き換えたくない場合は、一時バッファにコピーして、その文字列を渡します。
その他
- funcCRLFString 関数は「マルチバイト文字セット」、「Unicode文字セット」の両方に対応しています。
- 使用例のコンパイル時は printf 使用のため「マルチバイト文字セット」で行って下さい。
- なお、使用例ではクリップボードの内容を行番号付きで表示します。
関連記事
- 文字列バッファに NULL 文字を書き込む - funcZeroString()
- 文字列バッファに指定文字を書き込む - funcFillString()
- 文字列バッファに指定サイズだけ書き込む - funcCopyString()
- 文字列バッファの複製文字列を作成 - funcDupString()
- 文字列バッファを行単位で取得 - funcLineString()
- 文字列バッファの改行コードを削除 - funcCRLFString()
- 文字列バッファの基本関数(まとめ)
※コメント投稿者のブログIDはブログ作成者のみに通知されます