CString str = "中国";
char temp[100];
我试过GetBuffer(),当类型不匹配的时候也试过强制转换,可是temp中总不能得到正确的字符串。
GetBuffer()返回的是 LPTSTR 类型数据,据我了解这是unicode的指针型,怎么才能转换成char*呢?
先谢谢大家了!
19 个解决方案
#1
很简单:
strcpy(temp,(LPCTSTR)str);
ASSERT(sizeof(temp)>str.GetLength());
strcpy(temp,(LPCTSTR)str);
ASSERT(sizeof(temp)>str.GetLength());
#2
strcpy(temp, (LPTSTR)(LPCTSTR)str);
#3
memset( temp, 0, 100 );
strcat( temp, ( LPCTSTR )str );
strcat( temp, ( LPCTSTR )str );
#4
严格地说,应该是这样:
char temp[...];
strncpy(temp, (LPCTSTR)str, sizeof(temp));
temp[sizeof(temp) -1] = 0;
char temp[...];
strncpy(temp, (LPCTSTR)str, sizeof(temp));
temp[sizeof(temp) -1] = 0;
#5
to oldworm(oldworm)
你这样也不完善,有可能会出现读越界错误。(LPCTSTR)str可能比sizeof(temp)小,读越界有时候会导致系统异常:内存不可读。
你这样也不完善,有可能会出现读越界错误。(LPCTSTR)str可能比sizeof(temp)小,读越界有时候会导致系统异常:内存不可读。
#6
我的有点问题,不好意思...
#7
LPTSTR不是unicode的指针,LPCWSTR才是。
你的长度设置对了吗?
试试
str.GetBuffer(str.GetLength())
你的长度设置对了吗?
试试
str.GetBuffer(str.GetLength())
#8
上面两位的方法我试了,不行啊
#9
UNICODE用wchar_t来装.
wchar_t szUnicode[2];
char szBuf[4];
CString s = L"中国";
wcscpy( szUnicode, s );
strcpy( szBuf, szUnicode );
wchar_t szUnicode[2];
char szBuf[4];
CString s = L"中国";
wcscpy( szUnicode, s );
strcpy( szBuf, szUnicode );
#10
to stonespace(stonespace) :
看来你并不真懂,请看strncpy实现:
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
当str比sizeof(temp)短的时候拷贝已经终止了,怎么会访问到越界?
看来你并不真懂,请看strncpy实现:
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
当str比sizeof(temp)短的时候拷贝已经终止了,怎么会访问到越界?
#11
LPTSTR只有定义了_UNICODE才是wchr_t*, 否则是char*.
#12
for(int i=0;i<str.GetLength();i++)
{
chararray(i)=str.GetAt(i);
}
{
chararray(i)=str.GetAt(i);
}
#13
来晚了
#14
CString有重载符号[]
如
CString myString("abc");
那么
myString[1]='b';
只要用个循环语句就可以赋值了。循环的次数用CString.GetLength()确定
如
CString myString("abc");
那么
myString[1]='b';
只要用个循环语句就可以赋值了。循环的次数用CString.GetLength()确定
#15
GetBuffer
#16
哈哈!看到我的名字了吗?我认为是最简单的,看看是否对你有启发!
#17
strcpy(char*, CString)
#18
去看看专家的建议~~~
http://www.pgh.net/~newcomer/cstring.htm
http://www.pgh.net/~newcomer/cstring.htm
#19
可以使用memcpy
#20
#1
很简单:
strcpy(temp,(LPCTSTR)str);
ASSERT(sizeof(temp)>str.GetLength());
strcpy(temp,(LPCTSTR)str);
ASSERT(sizeof(temp)>str.GetLength());
#2
strcpy(temp, (LPTSTR)(LPCTSTR)str);
#3
memset( temp, 0, 100 );
strcat( temp, ( LPCTSTR )str );
strcat( temp, ( LPCTSTR )str );
#4
严格地说,应该是这样:
char temp[...];
strncpy(temp, (LPCTSTR)str, sizeof(temp));
temp[sizeof(temp) -1] = 0;
char temp[...];
strncpy(temp, (LPCTSTR)str, sizeof(temp));
temp[sizeof(temp) -1] = 0;
#5
to oldworm(oldworm)
你这样也不完善,有可能会出现读越界错误。(LPCTSTR)str可能比sizeof(temp)小,读越界有时候会导致系统异常:内存不可读。
你这样也不完善,有可能会出现读越界错误。(LPCTSTR)str可能比sizeof(temp)小,读越界有时候会导致系统异常:内存不可读。
#6
我的有点问题,不好意思...
#7
LPTSTR不是unicode的指针,LPCWSTR才是。
你的长度设置对了吗?
试试
str.GetBuffer(str.GetLength())
你的长度设置对了吗?
试试
str.GetBuffer(str.GetLength())
#8
上面两位的方法我试了,不行啊
#9
UNICODE用wchar_t来装.
wchar_t szUnicode[2];
char szBuf[4];
CString s = L"中国";
wcscpy( szUnicode, s );
strcpy( szBuf, szUnicode );
wchar_t szUnicode[2];
char szBuf[4];
CString s = L"中国";
wcscpy( szUnicode, s );
strcpy( szBuf, szUnicode );
#10
to stonespace(stonespace) :
看来你并不真懂,请看strncpy实现:
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
当str比sizeof(temp)短的时候拷贝已经终止了,怎么会访问到越界?
看来你并不真懂,请看strncpy实现:
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
当str比sizeof(temp)短的时候拷贝已经终止了,怎么会访问到越界?
#11
LPTSTR只有定义了_UNICODE才是wchr_t*, 否则是char*.
#12
for(int i=0;i<str.GetLength();i++)
{
chararray(i)=str.GetAt(i);
}
{
chararray(i)=str.GetAt(i);
}
#13
来晚了
#14
CString有重载符号[]
如
CString myString("abc");
那么
myString[1]='b';
只要用个循环语句就可以赋值了。循环的次数用CString.GetLength()确定
如
CString myString("abc");
那么
myString[1]='b';
只要用个循环语句就可以赋值了。循环的次数用CString.GetLength()确定
#15
GetBuffer
#16
哈哈!看到我的名字了吗?我认为是最简单的,看看是否对你有启发!
#17
strcpy(char*, CString)
#18
去看看专家的建议~~~
http://www.pgh.net/~newcomer/cstring.htm
http://www.pgh.net/~newcomer/cstring.htm
#19
可以使用memcpy