C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列コピー) |
(→文字列コピー) |
||
197行: | 197行: | ||
int main() { | int main() { | ||
_tsetlocale( LC_ALL, _T("Japanese")); | _tsetlocale( LC_ALL, _T("Japanese")); | ||
+ | size_t requiredSize = 0; | ||
+ | size_t sizecStr0=0; | ||
+ | |||
+ | size_t *sizeReturnValue; | ||
+ | sizeReturnValue = new size_t; | ||
+ | *sizeReturnValue=0; | ||
+ | |||
TCHAR *cStr0[]={_T("表示:よねウィキの機能<yonewiki>"),_T("表示:よねウィキの機能1<yonewiki>"),_T("表示:よねウィキの機能2<yonewiki>")}; | TCHAR *cStr0[]={_T("表示:よねウィキの機能<yonewiki>"),_T("表示:よねウィキの機能1<yonewiki>"),_T("表示:よねウィキの機能2<yonewiki>")}; | ||
const char *cStr1[]={" ","表示:よねウィキの機能<yonewiki>","表示:よねウィキの機能1<yonewiki>","表示:よねウィキの機能2<yonewiki>"}; | const char *cStr1[]={" ","表示:よねウィキの機能<yonewiki>","表示:よねウィキの機能1<yonewiki>","表示:よねウィキの機能2<yonewiki>"}; | ||
TCHAR **ppcStr0 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)]; | TCHAR **ppcStr0 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)]; | ||
− | + | char **ppcStr1 = new char*[sizeof(cStr1)/sizeof(*cStr1)]; | |
+ | unsigned char **ppucStr2; | ||
+ | ppucStr2 = new unsigned char*[sizeof(cStr1)/sizeof(*cStr1)]; | ||
for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | ||
− | |||
ppcStr0[i] = new TCHAR[_tcslen(cStr0[i]) + 1]; | ppcStr0[i] = new TCHAR[_tcslen(cStr0[i]) + 1]; | ||
− | |||
_tcscpy_s(ppcStr0[i], _tcslen(cStr0[i]) + 1,cStr0[i]);//ココ! | _tcscpy_s(ppcStr0[i], _tcslen(cStr0[i]) + 1,cStr0[i]);//ココ! | ||
} | } | ||
+ | |||
for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
− | + | ppcStr1[i] = new char[strlen(cStr1[i]) + 1]; | |
− | + | strcpy_s(ppcStr1[i], strlen(cStr1[i]) + 1,cStr1[i]);//ココ! | |
− | + | } | |
− | _mbscpy_s( | + | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ |
+ | printf("cStr1=%s sizeof=%d StrCount=%d\n", cStr1[i], sizeof(cStr1)/sizeof(*cStr1),strlen(cStr1[i])); | ||
+ | sizecStr0 = strlen(ppcStr1[i]) + 1; | ||
+ | ppucStr2[i] = new unsigned char[sizecStr0]; | ||
+ | _mbscpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]));//ココ! | ||
} | } | ||
for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | ||
− | _tprintf(_T("_tcslen(cStr0[i])=%d\nppcStr0=%s\n cStr0=%s\n\n"),_tcslen(cStr0[i]),*(ppcStr0 + i),*(cStr0 + i)); | + | _tprintf(_T("_tcslen(cStr0[i])=%d\nppcStr0=%s,\n cStr0=%s,\n\n"),_tcslen(cStr0[i]),*(ppcStr0 + i),*(cStr0 + i)); |
} | } | ||
for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | ||
− | printf("strlen(cStr1[i])=%d\nppcStr1=%s\n cStr1=%s\n\n" | + | printf("strlen(cStr1[i])=%d\nppcStr1=%s,\n cStr1=%s,\n\n",strlen(cStr1[i]),*(ppcStr1 + i),*(cStr1 + i)); |
+ | } | ||
+ | for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | ||
+ | printf("_mbslen(cStr1[i])=%d\nppucStr2=%s,\n cStr1=%s,\n\n",_mbslen(ppucStr2[i]),ppucStr2[i],*(cStr1 + i)); | ||
} | } | ||
for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | ||
225行: | 240行: | ||
delete[] *(ppcStr1 + i); | delete[] *(ppcStr1 + i); | ||
} | } | ||
+ | for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | ||
+ | delete[] *(ppucStr2 + i); | ||
+ | } | ||
+ | delete[] ppucStr2; | ||
delete[] ppcStr0; | delete[] ppcStr0; | ||
delete[] ppcStr1; | delete[] ppcStr1; | ||
231行: | 250行: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | という感じでしたね。無理やり_mbscpy関数を使ってみるとこんな感じですね。unsigned char型は宣言と同時にnew演算子の定義は出来ないようです。<br /> | |
+ | const型のcharからはキャストできないから、結局は一度、strcpy_sを使って、char型の文字列に置き換えないといけないです。<br /> | ||
+ | マルチバイト型の2バイト文字認識操作関数って結局は、char型と同じなので、<br /> | ||
+ | 文字数を数えるときはstrlenで数えないといけない。char型と_mbsxxx関数を行ったり来たりするだけです。<br /> | ||
+ | 出力結果は以下のとおり | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | _tcslen(cStr0[i])=21 | ||
+ | ppcStr0=表示:よねウィキの機能<yonewiki>, | ||
+ | cStr0=表示:よねウィキの機能<yonewiki>, | ||
+ | |||
+ | _tcslen(cStr0[i])=22 | ||
+ | ppcStr0=表示:よねウィキの機能1<yonewiki>, | ||
+ | cStr0=表示:よねウィキの機能1<yonewiki>, | ||
+ | |||
+ | _tcslen(cStr0[i])=22 | ||
+ | ppcStr0=表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr0=表示:よねウィキの機能2<yonewiki>, | ||
+ | |||
+ | strlen(cStr1[i])=1 | ||
+ | ppcStr1= , | ||
+ | cStr1= , | ||
+ | |||
+ | strlen(cStr1[i])=32 | ||
+ | ppcStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | |||
+ | strlen(cStr1[i])=33 | ||
+ | ppcStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | |||
+ | strlen(cStr1[i])=33 | ||
+ | ppcStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | |||
+ | _mbslen(cStr1[i])=1 | ||
+ | ppucStr2= , | ||
+ | cStr1= , | ||
+ | |||
+ | _mbslen(cStr1[i])=21 | ||
+ | ppucStr2=表示:よねウィキの機能<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | |||
+ | _mbslen(cStr1[i])=22 | ||
+ | ppucStr2=表示:よねウィキの機能1<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | |||
+ | _mbslen(cStr1[i])=22 | ||
+ | ppucStr2=表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | </syntaxhighlight> | ||
=='''文字列連結'''== | =='''文字列連結'''== |