5

CStringを に変換したいchar[]。誰かがこれを行う方法を教えてくれますか?

私のコードは次のようなものです:

CString strCamIP1 = _T("");
char g_acCameraip[16][17];
strCamIP1 = theApp.GetProfileString(strSection, _T("IP1"), NULL);
g_acCameraip[0] = strCamIP1;
4

12 に答える 12

8

これは正しい線に沿っているようです。http://msdn.microsoft.com/en-us/library/awkwbzyc.aspx

CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);

あなたの場合、これは次のようになります

strcpy(g_acCameraip[0], (LPCTSTR)strCamIP1);
于 2012-05-14T06:49:36.767 に答える
7

MSDNサイトから:

// Convert to a char* string from CStringA string 
// and display the result.
CStringA origa("Hello, World!");
const size_t newsizea = (origa.GetLength() + 1);
char *nstringa = new char[newsizea];
strcpy_s(nstringa, newsizea, origa);
cout << nstringa << " (char *)" << endl;

CString はに基づいてTCHARいるため、コンパイルしない_UNICODE場合CStringA、またはコンパイルする場合_UNICODECStringW.

変換の場合はCStringW少し異なります (例もMSDNから):

// Convert to a char* string from a wide character 
// CStringW string. To be safe, we allocate two bytes for each
// character in the original string, including the terminating
// null.
const size_t newsizew = (origw.GetLength() + 1)*2;
char *nstringw = new char[newsizew];
size_t convertedCharsw = 0;
wcstombs_s(&convertedCharsw, nstringw, newsizew, origw, _TRUNCATE );
cout << nstringw << " (char *)" << endl;
于 2012-05-14T06:49:49.697 に答える
3

wcstombs_sを使用できます:

// Convert CString to Char By Quintin Immelman.
//
CString DummyString;
// Size Can be anything, just adjust the 100 to suit. 
const size_t StringSize = 100;
// The number of characters in the string can be
// less than String Size. Null terminating character added at end.
size_t CharactersConverted = 0;

char DummyToChar[StringSize];

wcstombs_s(&CharactersConverted, DummyToChar, 
       DummyString.GetLength()+1, DummyString, 
       _TRUNCATE);
//Always Enter the length as 1 greater else 
//the last character is Truncated
于 2012-05-14T06:48:58.403 に答える
3

ATL を使用している場合は、変換マクロの 1 つを使用できます。CString はデータを tchar として格納するため、CT2A() を使用します (マクロ名の C は const を表します)。

CString from("text");

char* pStr = CT2A((LPCTSTR)from);

これらのマクロはスマートです。tchar が ascii (_UNICODE が定義されていない) を表す場合、ポインタを渡すだけで何もしません。

以下の詳細情報、ATL 文字列変換クラスセクション: http://www.369o.com/data/books/atl/index.html?page=0321159624%2Fch05.html

于 2014-09-28T20:46:09.020 に答える
0
    CString str;
    //Do something
    char* pGTA = (LPTSTR)(LPCTSTR)str;//Now the cast

ちょうど (LPTSTR)(LPCTSTR)。これがあなたが必要とするものであることを願っています:)

于 2016-04-01T14:26:18.643 に答える
0
char strPass[256];
strcpy_s( strPass, CStringA(strCommand).GetString() );
于 2016-07-21T11:04:22.717 に答える
0

fopen は char* パラメータを必要とする関数です。したがって、使用可能な文字列として CString がある場合は、次のコードを使用できます。幸せになってください:)ここでは、cFDlg.GetPathName().GetString();基本的に私のコードで CString を返します。

char*pp  = (char*)cFDlg.GetPathName().GetString();
FILE *fp = ::fopen(pp,"w");
于 2015-08-11T12:06:04.580 に答える
0

memcpy を使用します。

char c [25];
Cstring cstr = "123";
memcpy(c,cstr,cstr.GetLength());
于 2013-03-15T05:40:45.100 に答える
0

オブジェクトを固定配列にコピーする必要は本当にありますか?CStringchar

enum { COUNT=16 };
CString Cameraip[COUNT];
Cameraip[0] = theApp.GetProfileString(strSection, _T("IP1"), NULL);
// add more entries...

...そして-後で-エントリにアクセスするとき、たとえば次のように

for (int i=0; i<COUNT; ++i) {
    someOp(Cameraip[i]); // the someOp function takes const CString&
}

...必要に応じて変換できます。

于 2014-02-13T11:12:10.417 に答える
0

CStringA/Wは安価に暗黙のうちに に変換可能const char/wchar_t *です。C スタイルの文字列が必要な場合はいつでも、CStringオブジェクト自体 (またはその結果が.GetString()同じ) を渡すだけです。文字列オブジェクトが生きていて変更されていない限り、ポインターは有効なままです。

strcpy(g_acCameraip[0], strCamIP1);
// OR
strcpy(g_acCameraip[0], strCamIP1.GetString());

書き込み可能な (非定数) バッファーが必要な場合は.GetBuffer()、オプションの最大長引数と共に使用します。

持っているCStringWが必要な場合const char*、またはその逆の場合は、一時CStringAオブジェクトを使用できます。

strcpy(g_acCameraip[0], CStringA(strCamIP1).GetString());

しかし、はるかに良い方法は、配列を持つことCStringです。null で終わる文字列が必要な場所ならどこでも使用できますが、文字列のメモリも管理します。

std::vector<CString> g_acCameraip(16);
g_acCameraip[0] = theApp.GetProfileString(strSection, _T("IP1"), NULL);
于 2012-05-14T06:58:32.727 に答える