代码C++//头文件及命名空间略public ref class Un { public: int C(String^ s) { pin_ptr<const wchar_t>cx; cx = PtrToStringChars(s); allspace::Char cs=cx;//将类型为const wchar_t* 的cx转换成const char * ErrMsg(cs);//MessageBoxA(0,cs,"错误",MB_ICONERROR); return 0; } };C# private void Button_Click(object sender, RoutedEventArgs e) { My.Un un = new My.Un(); StringBuilder strb=new StringBuilder("String"); un.C(strb.ToString()); }运行结果见图
传进去的东西,StringBuilding的对象strb
vs可以看实时的值
显示的字符串是正确的
赋值代码
1.String^转成wchar_t*用的
pin_ptr x=
PtrToStringChars(arg)
2.const wchar_t*转成char *用的wcstombs
都是系统api
输出就是把wcstombs转换后的char*字符串输出了
用MessageBoxA直接输出
追答转换呢?
你把那个字符串赋一个其它的值测试一下,或者直接手动把后面的字符赋一个空值
追问我也想赋空值
他说const不让我赋,我把const去掉PtrToStringChars又告诉我不是const不能用
追答const我没怎么用过,不能赋空值吗?
那我真不知道了,不好意思
追问这样用wcslen似乎也因为字符串没有结尾,得不到正确的值
不过我还没用
赋其他值,如果指的是
String,已经换过几个了,一样
如果指的是
pin_ptr,换不了
如果指的是我这个Char对象
我这个类的构造已经将new出来的char*的所有单位都填零了
那主函数外定义呢
追问char *n;
public:
Char()
{
n=new char[999];
for(int i=0;i<999;i++)
{
n[i]=0;
}
}
填零过程
其他的已略
追答不是
我是让你在主函数外定义一下试试
追问主函数外?全局变量?
而且我这里有任何的maim函数吗?
main
追答好吧
我怎么知道你没有
追问哦,只有网页版可以看见代码
你复制一下去浏览器
本来我是排好版的,给我打乱了
找到方法
了
String.Length,在Length处截断
这么简单的办法一开始居然没想到
本回答被提问者采纳