C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の型変換) |
(→文字列の型変換) |
||
| 2,182行: | 2,182行: | ||
delete[] psysstring_StrCnv; | delete[] psysstring_StrCnv; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→char | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→char\n")); | ||
| + | |||
| + | const string stringOrigin[] = {"string型の変数 配列要素1","string型の変数 配列要素2","string型の変数 配列要素3"}; | ||
| + | |||
| + | printf("%d\n", sizeof(*stringOrigin)); | ||
| + | printf("%d\n", sizeof(stringOrigin)); | ||
| + | |||
| + | *pnStrArrayElement = sizeof(stringOrigin)/sizeof(*stringOrigin); | ||
| + | |||
| + | ppcStrCnv = new char*[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | *sizeReturnValue = strlen(stringOrigin[i].c_str()) + 1; | ||
| + | ppcStrCnv[i] = new char[*sizeReturnValue]; | ||
| + | strcpy_s(ppcStrCnv[i], *sizeReturnValue, stringOrigin[i].c_str()); | ||
| + | } | ||
| + | |||
| + | //char出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | printf("%s\n",*(ppcStrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | for(int i = 0;i < *pnStrArrayElement ;i++){ | ||
| + | delete[] *(ppcStrCnv + i); | ||
| + | } | ||
| + | delete[] ppcStrCnv; | ||
| + | |||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→TCHAR | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→TCHAR\n")); | ||
| + | |||
| + | pptcStrCnv = new TCHAR*[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | |||
| + | #ifdef UNICODE | ||
| + | mbstowcs_s(sizeReturnValue, NULL, 0,stringOrigin[i].c_str(), 0); | ||
| + | pptcStrCnv[i] = new TCHAR[*sizeReturnValue]; | ||
| + | mbstowcs_s(sizeReturnValue, pptcStrCnv[i], *sizeReturnValue,stringOrigin[i].c_str(), *sizeReturnValue); | ||
| + | #else | ||
| + | *sizeReturnValue = strlen(stringOrigin[i].c_str()) + 1; | ||
| + | pptcStrCnv[i] = new TCHAR[*sizeReturnValue]; | ||
| + | _tcscpy_s(pptcStrCnv[i], *sizeReturnValue, stringOrigin[i].c_str()); | ||
| + | #endif | ||
| + | } | ||
| + | |||
| + | //char出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | _tprintf(_T("%s\n"),*(pptcStrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | for(int i = 0;i < *pnStrArrayElement ;i++){ | ||
| + | delete[] *(pptcStrCnv + i); | ||
| + | } | ||
| + | delete[] pptcStrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→_bstr_t(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→_bstr_t\n")); | ||
| + | |||
| + | pbstrt_StrCnv = new _bstr_t[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pbstrt_StrCnv[i] = stringOrigin[i].c_str(); | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //無変換出力 | ||
| + | printf("%s\n",(char*)pbstrt_StrCnv[i]); | ||
| + | _tprintf(_T("%s\n"),(wchar_t*)pbstrt_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pbstrt_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→CComBSTR(マルチバイト文字ワイド文字両対応 プロジェクト設定に従う) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→CComBSTR\n")); | ||
| + | |||
| + | pccombstr_StrCnv = new CComBSTR[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pccombstr_StrCnv[i] = stringOrigin[i].c_str(); | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | CW2A printstr(*(pccombstr_StrCnv + i)); | ||
| + | printf("%s\n",printstr); | ||
| + | //無変換出力 | ||
| + | _tprintf(_T("%s\n"),*(pccombstr_StrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pccombstr_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→CStringA(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→CStringA\n")); | ||
| + | |||
| + | pcstringa_StrCnv = new CStringA[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pcstringa_StrCnv[i] = stringOrigin[i].c_str(); | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | printf("%s\n",pcstringa_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pcstringa_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→CStringW(ワイド文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→CStringW\n")); | ||
| + | |||
| + | pcstringw_StrCnv = new CStringW[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pcstringw_StrCnv[i] = stringOrigin[i].c_str(); | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //wchar_t出力 | ||
| + | wprintf(L"%s\n",pcstringw_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pcstringw_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・string→SystemString(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→SystemString\n")); | ||
| + | |||
| + | psysstring_StrCnv = gcnew array<String^>(*pnStrArrayElement); | ||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | char* pcStrTemp = new char[strlen(stringOrigin[i].c_str()) + 1]; | ||
| + | strcpy_s(pcStrTemp,strlen(stringOrigin[i].c_str()) + 1,stringOrigin[i].c_str()); | ||
| + | System::IntPtr ptr(pcStrTemp); | ||
| + | psysstring_StrCnv[i] = Marshal::PtrToStringAnsi(ptr); | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | printf("%s\n",psysstring_StrCnv[i]); | ||
| + | //TCHAR変換出力 | ||
| + | #ifdef UNICODE | ||
| + | _tprintf(_T("%s\n"),PtrToStringChars(psysstring_StrCnv[i])); | ||
| + | #else | ||
| + | _tprintf(_T("%s\n"),psysstring_StrCnv[i]); | ||
| + | #endif | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] psysstring_StrCnv; | ||
| + | </syntaxhighlight> | ||
| + | <syntaxhighlight lang="cpp" line start="1"> | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→char | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換string→char\n")); | ||
| + | |||
| + | array<String^> ^sysstringOrigin = gcnew array<String^>{"SystemString型の変数 配列要素1","SystemString型の変数 配列要素2","SystemString型の変数 配列要素3"}; | ||
| + | |||
| + | printf("%d\n", sysstringOrigin->Length); | ||
| + | |||
| + | *pnStrArrayElement = sysstringOrigin->Length; | ||
| + | |||
| + | ppcStrCnv = new char*[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | ppcStrCnv[i] = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, ppcStrCnv[i], *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | } | ||
| + | |||
| + | //char出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | printf("%s\n",*(ppcStrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | for(int i = 0;i < *pnStrArrayElement ;i++){ | ||
| + | delete[] *(ppcStrCnv + i); | ||
| + | } | ||
| + | delete[] ppcStrCnv; | ||
| + | |||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→TCHAR | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→TCHAR\n")); | ||
| + | |||
| + | pptcStrCnv = new TCHAR*[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | |||
| + | #ifdef UNICODE | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | *sizeReturnValue = _tcslen(wch) + 1; | ||
| + | pptcStrCnv[i] = new TCHAR[*sizeReturnValue]; | ||
| + | _tcscpy_s(pptcStrCnv[i], *sizeReturnValue, wch); | ||
| + | #else | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | pptcStrCnv[i] = new TCHAR[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pptcStrCnv[i], *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | #endif | ||
| + | } | ||
| + | |||
| + | //char出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | _tprintf(_T("%s\n"),*(pptcStrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | for(int i = 0;i < *pnStrArrayElement ;i++){ | ||
| + | delete[] *(pptcStrCnv + i); | ||
| + | } | ||
| + | delete[] pptcStrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→_bstr_t(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→_bstr_t\n")); | ||
| + | |||
| + | pbstrt_StrCnv = new _bstr_t[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | char* pcStrTemp = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pcStrTemp, *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | pbstrt_StrCnv[i] = pcStrTemp; | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //無変換出力 | ||
| + | printf("%s\n",(char*)pbstrt_StrCnv[i]); | ||
| + | _tprintf(_T("%s\n"),(wchar_t*)pbstrt_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pbstrt_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→CComBSTR(マルチバイト文字ワイド文字両対応 プロジェクト設定に従う) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→CComBSTR\n")); | ||
| + | |||
| + | pccombstr_StrCnv = new CComBSTR[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | char* pcStrTemp = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pcStrTemp, *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | pccombstr_StrCnv[i] = pcStrTemp; | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | CW2A printstr(*(pccombstr_StrCnv + i)); | ||
| + | printf("%s\n",printstr); | ||
| + | //無変換出力 | ||
| + | _tprintf(_T("%s\n"),*(pccombstr_StrCnv + i)); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pccombstr_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→CStringA(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→CStringA\n")); | ||
| + | |||
| + | pcstringa_StrCnv = new CStringA[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | char* pcStrTemp = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pcStrTemp, *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | pcstringa_StrCnv[i] = pcStrTemp; | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | printf("%s\n",pcstringa_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pcstringa_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→CStringW(ワイド文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→CStringW\n")); | ||
| + | |||
| + | pcstringw_StrCnv = new CStringW[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | char* pcStrTemp = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pcStrTemp, *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | pcstringw_StrCnv[i] = pcStrTemp; | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //wchar_t出力 | ||
| + | wprintf(L"%s\n",pcstringw_StrCnv[i]); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pcstringw_StrCnv; | ||
| + | |||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | //・SystemString→string(マルチバイト文字) | ||
| + | //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | ||
| + | |||
| + | _tprintf(_T("\n文字列の型変換SystemString→string\n")); | ||
| + | |||
| + | pstring_StrCnv = new string[*pnStrArrayElement];//要素数分の大きさ+1を確保 | ||
| + | |||
| + | //変換 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | pin_ptr<const wchar_t> wch = PtrToStringChars(sysstringOrigin[i]); | ||
| + | wcstombs_s(sizeReturnValue, NULL, 0,wch, 0); | ||
| + | char* pcStrTemp = new char[*sizeReturnValue]; | ||
| + | wcstombs_s(sizeReturnValue, pcStrTemp, *sizeReturnValue, wch, *sizeReturnValue); | ||
| + | pstring_StrCnv[i] = pcStrTemp; | ||
| + | } | ||
| + | |||
| + | //出力 | ||
| + | for(int i = 0; i < *pnStrArrayElement; i++){ | ||
| + | //char変換出力 | ||
| + | printf("%s\n",pstring_StrCnv[i].c_str()); | ||
| + | } | ||
| + | |||
| + | //動的確保変数の解放 | ||
| + | delete[] pstring_StrCnv; | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | と、こんな感じです。 | ||
| + | |||
※2014/09/21 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。 | ※2014/09/21 ここまでで、疲れたから、また暫くオヤスミ。次に気が向くのはいつになるのか、誰も知らない。 | ||