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

提供: yonewiki
移動: 案内, 検索
(文字列長取得)
(文字列コピー)
189行: 189行:
 
<br />
 
<br />
 
で、結局は_tcsncpy_sを使いなさいってことになります。Unicode設定ならワイド文字版で、文字列長に厳しい設定が必要なwcsncpy_sだね。
 
で、結局は_tcsncpy_sを使いなさいってことになります。Unicode設定ならワイド文字版で、文字列長に厳しい設定が必要なwcsncpy_sだね。
 +
第二引数は配列の大きさ+終端\0のための要素1つ分。バイト数ではないです。<br />
 +
動的に生成した変数の場合は配列の大きさが取得できないので、wcslen(_tcslen)のような文字列長取得関数を使って、戻ってきた値に\0の要素のために1を加算した値が良いです。<br />
 
<syntaxhighlight lang="cpp" line start="1">
 
<syntaxhighlight lang="cpp" line start="1">
 
#include <iostream>
 
#include <iostream>
196行: 198行:
 
_tsetlocale( LC_ALL, _T("Japanese"));
 
_tsetlocale( LC_ALL, _T("Japanese"));
 
TCHAR *cStr0[]={_T("表示:よねウィキの機能<yonewiki>"),_T("表示:よねウィキの機能1<yonewiki>"),_T("表示:よねウィキの機能2<yonewiki>")};
 
TCHAR *cStr0[]={_T("表示:よねウィキの機能<yonewiki>"),_T("表示:よねウィキの機能1<yonewiki>"),_T("表示:よねウィキの機能2<yonewiki>")};
TCHAR **pcStr0 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)];
+
const char *cStr1[]={" ","表示:よねウィキの機能<yonewiki>","表示:よねウィキの機能1<yonewiki>","表示:よねウィキの機能2<yonewiki>"};
 +
TCHAR **ppcStr0 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)];
 +
unsigned char **ppcStr1 = new 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++){
 
                 _tprintf(_T("cStr0=%s sizeof=%d StrCount=%d\n"), cStr0[i], sizeof(cStr0)/sizeof(*cStr0),_tcslen(cStr0[i]));
 
                 _tprintf(_T("cStr0=%s sizeof=%d StrCount=%d\n"), cStr0[i], sizeof(cStr0)/sizeof(*cStr0),_tcslen(cStr0[i]));
pcStr0[i] = new TCHAR[_tcslen(cStr0[i]) + 1];
+
ppcStr0[i] = new TCHAR[_tcslen(cStr0[i]) + 1];
 
_tprintf(_T("cStr0=%s\n\n"),*(cStr0 + i));
 
_tprintf(_T("cStr0=%s\n\n"),*(cStr0 + i));
_tcscpy_s(pcStr0[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++){
 +
                printf("cStr1=%s sizeof=%d StrCount=%d\n", cStr1[i], sizeof(cStr1)/sizeof(*cStr1),strlen(cStr1[i]));
 +
ppcStr1[i] = new unsigned char[strlen(cStr1[i]) + 1];
 +
printf("cStr1=%s\n\n"),*(cStr1 + i));
 +
_mbscpy_s(ppcStr1[i], strlen(cStr1[i]) + 1,cStr0[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\npcStr0=%s\n cStr0=%s\n\n"),_tcslen(cStr0[i]),*(pcStr0 + 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++){
 +
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(cStr0)/sizeof(*cStr0); i++){
 
for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){
delete[] *(pcStr0 + i);
+
delete[] *(ppcStr0 + i);
 +
}
 +
for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){
 +
delete[] *(ppcStr1 + i);
 
}
 
}
delete[] pcStr0;
+
delete[] ppcStr0;
 +
delete[] ppcStr1;
 
printf("\n");
 
printf("\n");
 
return 0;
 
return 0;

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



個人用ツール
名前空間

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