C 文字列操作 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文字列コピー)
(文字列コピー)
321行: 321行:
 
 
 
//_mbscpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]));//ココ!
 
//_mbscpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]));//ココ!
_mbsncpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]), sizecStr0);//ココ!
+
_mbsncpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]), _mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i])));//ココ!
 +
 
 
 
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
と、4つの引数をとるように記述します。第4引数が出力する最大文字の配列数です。_tcsncpy_sでは出力する文字数と考えることもできます。<br />
+
と、4つの引数をとるように記述します。第4引数が出力する最大文字の配列数です。出力する文字数と考えることもできます。<br />
マルチバイト文字の場合は2バイト文字が切れずにコピーされるかどうかの保証ができません。切ろうとしている文字の数値が128以上ならば、<br />
+
マルチバイト文字の場合には出力する文字数を指定できるのは効果的で、先頭から何バイト目で区切れば日本語文字が分断されないかの判断も<br />
出力文字数に1を加えたり、減らすことで、そのような問題を解決することができます。unsigned charですので、負の数を持たないということになり、<br />
+
してくれながらの出力となります。この出力する文字数をあえてバイト単位で指定する_mabsnbcpy_sもあります。<br />
数値比較する場合は0~255で比較ができます。char型なら負の数値としての扱いがあるため、-128~127の256とおりの数値を保有します。
+
ただし、コピー先の文字列の配列はstrlenのようなバイト数分で準備する必要があることに注意が必要です。<br />
 +
出力文字数を指定する場合は文字列全体の長さではなく、指定した文字数で必要な文字列バイト数を算出しておいて、メモリを確保するように<br />
 +
処理を記述するのが良いかもしれません。<br />
 +
ここでは強制キャストを使いましたが、もともとの文字列がunsigned charとして定義されているものをコピーするときに_mbs系の文字列コピーを<br />
 +
利用するというのが自然な使い方になります。<br />
  
 
=='''文字列連結'''==
 
=='''文字列連結'''==

2013年11月30日 (土) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス