在托管c++中怎样把String转换成char*?

时间:2022-10-15 04:17:49
在托管c++中怎样把String转换成char*?
请各位高手帮下忙!谢谢!

17 个解决方案

#1


托管c++是什么东西?如果你的String是一个Class的话,应该有个char*的成员变量/函数的。

#2


用for语句一个个的付值

char *c[];
string s;
for (int i =0 ;i<s.getlength();i++)
c[i]=s.getai(i);

#3


String 是.net里面一个类!
还有其它方法吗?
在等待。。。

#4


CString strTemp = "hello";
char *pStr;
pStr = strTemp.GetBuffer(0);

#5


up

#6


大家看清楚一点,是.net里的String类,不是mfc的CString类!
还是多谢你们的回答,难道就没办法把String换成char*吗?

#7


没用过托管下的c++
我只知道c#有System.Convert.XXX(),但这是c#下的,不知道c++有没有

#8


但是System命名空间应该是.net framework的,而不是c#本身的,不知道c++能用吗

#9


搞错了:)

#10


难道真的没办法把String换成char*吗?如果是这样的话,那以前写的函数和动态库不是没办法在vc.net托管的方式下用了吗?
谢大家帮忙想下办法!谢谢!

#11


CString aa="Hello";
char temp[100];
temp=(LPSTR)(LPCTSTR)aa;

#12


用strcpy()也可。

#13


终于搞定,结帐!多谢大家的参与!

#14


VS.NET Combinbined Collection中说:
Regular C++ wide-character string literals (prefixed by L) and managed string literals (prefixed by S) can be used interchangeably where String types are expected. However, the reverse is not true. Managed string literals cannot be used where C++ string types are expected.

#15


怎么搞定的呀?
我还想问楼主一个问题,我怎么把char*转成String啊,我的String是作为参数传到函数中的,我怎么写他的值都不变,怪了。
.Net的问题没人答,只好在这里问了。

#16


以下是一封技术交流邮件的部分,作者dongjt
CString->char *

>一个小问题:关于CString转换为char *
>(1) CString => const char * (或者LPCTSTR)
> 直接显式或隐式转换即可,如:
> CString a("123");
> LPCTSTR p = (LPCTSTR)a;
> (或 LPCTSTR p = a;)
>
>(2) CString => char * (或者LPTSTR)
> > 方法一:
> CString a("123");
> LPTSTR p = a.GetBuffer(a.GetLenth());
> ……     // use p
> a.ReleaseBuffer();
> > 注意:调用GetBuffer后最好立即调用ReleaseBuffer,
> 否则再用a时可能会出问题或得不到正确结果。


调用a.ReleaseBuffer();的时机是在使用了p之后,再次使用a之前!!
如果在使用p之前调用,则使用p时会出错;如果在使用a之前没有调用,
则使用a时会出错或得不到正确结果。

>
> 方法二:
> CString a("123");
> LPTSTR p = (LPTSTR)(LPCTSTR)a;
> > 注意:这种方法只能用于再将p的值赋给其它变量,或
> 作为类似Set、Insert等执行赋值操作的函数参数;
> 而不能接受返回值,也不能作为类似Get等执行取值
> 操作的函数参数。
>

对于char*->CString
You can freely substitute CString objects for const char* and LPCTSTR function arguments.
我在VC里面直接替换用过毫无问题。
你说它的值不变,你查查其它原因。

#17


Rigel(猎户座-参宿七)
我也遇到你这样的问题,哦,你是金?
方法如下:
String * sSQL = "select * from container";

IntPtr sptr = ::Marshal::StringToHGlobalAnsi(sSQL);
void* stemp = sptr.ToPointer();
char* szSQL = static_cast<char*>(stemp);

#1


托管c++是什么东西?如果你的String是一个Class的话,应该有个char*的成员变量/函数的。

#2


用for语句一个个的付值

char *c[];
string s;
for (int i =0 ;i<s.getlength();i++)
c[i]=s.getai(i);

#3


String 是.net里面一个类!
还有其它方法吗?
在等待。。。

#4


CString strTemp = "hello";
char *pStr;
pStr = strTemp.GetBuffer(0);

#5


up

#6


大家看清楚一点,是.net里的String类,不是mfc的CString类!
还是多谢你们的回答,难道就没办法把String换成char*吗?

#7


没用过托管下的c++
我只知道c#有System.Convert.XXX(),但这是c#下的,不知道c++有没有

#8


但是System命名空间应该是.net framework的,而不是c#本身的,不知道c++能用吗

#9


搞错了:)

#10


难道真的没办法把String换成char*吗?如果是这样的话,那以前写的函数和动态库不是没办法在vc.net托管的方式下用了吗?
谢大家帮忙想下办法!谢谢!

#11


CString aa="Hello";
char temp[100];
temp=(LPSTR)(LPCTSTR)aa;

#12


用strcpy()也可。

#13


终于搞定,结帐!多谢大家的参与!

#14


VS.NET Combinbined Collection中说:
Regular C++ wide-character string literals (prefixed by L) and managed string literals (prefixed by S) can be used interchangeably where String types are expected. However, the reverse is not true. Managed string literals cannot be used where C++ string types are expected.

#15


怎么搞定的呀?
我还想问楼主一个问题,我怎么把char*转成String啊,我的String是作为参数传到函数中的,我怎么写他的值都不变,怪了。
.Net的问题没人答,只好在这里问了。

#16


以下是一封技术交流邮件的部分,作者dongjt
CString->char *

>一个小问题:关于CString转换为char *
>(1) CString => const char * (或者LPCTSTR)
> 直接显式或隐式转换即可,如:
> CString a("123");
> LPCTSTR p = (LPCTSTR)a;
> (或 LPCTSTR p = a;)
>
>(2) CString => char * (或者LPTSTR)
> > 方法一:
> CString a("123");
> LPTSTR p = a.GetBuffer(a.GetLenth());
> ……     // use p
> a.ReleaseBuffer();
> > 注意:调用GetBuffer后最好立即调用ReleaseBuffer,
> 否则再用a时可能会出问题或得不到正确结果。


调用a.ReleaseBuffer();的时机是在使用了p之后,再次使用a之前!!
如果在使用p之前调用,则使用p时会出错;如果在使用a之前没有调用,
则使用a时会出错或得不到正确结果。

>
> 方法二:
> CString a("123");
> LPTSTR p = (LPTSTR)(LPCTSTR)a;
> > 注意:这种方法只能用于再将p的值赋给其它变量,或
> 作为类似Set、Insert等执行赋值操作的函数参数;
> 而不能接受返回值,也不能作为类似Get等执行取值
> 操作的函数参数。
>

对于char*->CString
You can freely substitute CString objects for const char* and LPCTSTR function arguments.
我在VC里面直接替换用过毫无问题。
你说它的值不变,你查查其它原因。

#17


Rigel(猎户座-参宿七)
我也遇到你这样的问题,哦,你是金?
方法如下:
String * sSQL = "select * from container";

IntPtr sptr = ::Marshal::StringToHGlobalAnsi(sSQL);
void* stemp = sptr.ToPointer();
char* szSQL = static_cast<char*>(stemp);