C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列長取得) |
(→文字列長取得) |
||
72行: | 72行: | ||
StrCount=22 | StrCount=22 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | _mb系の関数を利用するには、<br /> | |
+ | #include <mbstring.h>をインクルードする必要があります。<br /> | ||
+ | <br /> | ||
+ | 更に_mbslenは文字列長探索をしたい文字列変数の引数が、unsigned char型ですので、<br /> | ||
wchar_t型、char型の引数では文字列長を探索することは出来ません。あえて実施するならば、<br /> | wchar_t型、char型の引数では文字列長を探索することは出来ません。あえて実施するならば、<br /> | ||
reinterpret_cast<unsigned char*>(※charポインタ型※)と強制的なキャストを実施することで、動作させることができます。<br /> | reinterpret_cast<unsigned char*>(※charポインタ型※)と強制的なキャストを実施することで、動作させることができます。<br /> | ||
80行: | 83行: | ||
<syntaxhighlight lang="cpp" line start="1"> | <syntaxhighlight lang="cpp" line start="1"> | ||
#include <tchar.h> | #include <tchar.h> | ||
+ | #include <mbstring.h> | ||
int main() { | int main() { | ||
_tsetlocale(LC_ALL, _T("Japanese")); | _tsetlocale(LC_ALL, _T("Japanese")); | ||
88行: | 92行: | ||
ppcStr1[i] = new char[strlen(cStr1[i]) + 1];//まずは単純に文字列をコピーするための領域を確保。 | ppcStr1[i] = new char[strlen(cStr1[i]) + 1];//まずは単純に文字列をコピーするための領域を確保。 | ||
− | strcpy_s(ppcStr1[i], strlen(cStr1[i]) + 1,cStr1[i]); | + | strcpy_s(ppcStr1[i], strlen(cStr1[i]) + 1,cStr1[i]);//コピー |
} | } | ||
for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
+ | //強制キャストでunsigned char*型に変換して文字列長を探索。 | ||
printf("%2d/%2d:cStr1[%2d]=%s\nStrCount=%d\n\n",i, sizeof(cStr1)/sizeof(*cStr1),i, ppcStr1[i],_mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i]))); | printf("%2d/%2d:cStr1[%2d]=%s\nStrCount=%d\n\n",i, sizeof(cStr1)/sizeof(*cStr1),i, ppcStr1[i],_mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i]))); | ||
} | } | ||
116行: | 121行: | ||
<syntaxhighlight lang="cpp" line start="1"> | <syntaxhighlight lang="cpp" line start="1"> | ||
#include <tchar.h> | #include <tchar.h> | ||
+ | #include <mbstring.h> | ||
int main() { | int main() { | ||
_tsetlocale(LC_ALL, _T("Japanese")); | _tsetlocale(LC_ALL, _T("Japanese")); | ||
142行: | 148行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | といった具合にいろいろな関数があるので、一つづつ掘り下げて理解しておくのも、必要です。<br /> | ||
+ | こういう違いがあるということを把握していれば、臨機応変に対応しやすくなるかもです。<br /> | ||
+ | 自分は分かったつもりにならずに、常に謙虚に確かめてみる姿勢ってのは、必要なんじゃないかと思います。<br /> | ||
+ | そして常に、自分が実施するであろうパターンを網羅して確かめる。だから、あえて文字列の配列の場合に<br /> | ||
+ | どうやればいいのかを探ります。 | ||
+ | |||
*コピー | *コピー | ||
*連結 | *連結 |