C++2010 .net字符串String^转Char[]数组的问题,数组赋值总是从下标4开始
由于本人初学C++,原先学习的是C#,想利用.net 环境开发,最近遇到一个很神奇的问题:我在页面头部定义了一个结构体
typedef struct infor_field
{
char rope_type[20]; //被测钢丝绳型号 变长
char working_spot[40]; //工作地点 变长
char device_name[40]; //检测设备名称 变长
char woking_time1[20]; //采样年月日 变长
char woking_time2[20]; //采样时分秒 变长
char soft_ver[20]; //软件版本 变长
unsigned char working_step; //采样步长 1个字节
float Ch1_Adjust; //通道一零点 4个字节
float Ch2_Adjust; //通道二零点 4个字节
float Ch3_Adjust; //通道三零点 4个字节
float Ch4_Adjust; //通道四零点 4个字节
float rope_speed; //绳运动速度 4个字节
}INFOR_FIELD;
然后是声明:
INFOR_FIELD g_Dat_head;//文件头
然后在namespace中取得控件的文本,其中strRopeType是namespace中的全局变量,cbbRopeType是下拉框
strRopeType=cbbRopeType->Text;//赋值
然后我想把文本赋值给g_Dat_head.rope_type
char charTemp;
for (int i=0;i<strRopeType->Length;i++)
{//没办法,只能自己手动转换Char数组和字符串
//这里有个很神奇的调试器bug,g_Dat_head.rope_type[i]是从i=4开始赋值的,搞不懂
charTemp=strRopeType->ToCharArray()[i];
g_Dat_head.rope_type[i]=charTemp;
}
调试的时候发现很多问题,首先是结构体的初始化,rope_type自带乱码:
strRopeType的值:
执行几步之后,发现g_Dat_head.rope_type是从下标4开始赋值的,还有g_Dat_head中的其他字符数组都是这样的情况。请教各位前辈指点,感激不尽!
注:进入调试模式,选择即时窗口,在即时窗口中输入代码是能够正确赋值的:
--------------------编程问答-------------------- 从控件中获得的一般都是CString类型,从CString类型转换到char数组需要区分你的程序使用的字符集是UNICODE还是多字节,具体转换在网上搜索下CString char转换即可。结构体使用前先初始化下试试。
--------------------编程问答-------------------- 要用[StructLayoutAttribute(LayoutKind.Sequential)]让结构体对齐。 --------------------编程问答--------------------
是的,经过几位前辈提醒,发现是类型没有设置好,在结构体中我应该使用wchar_t来建立数组,因为.net类型中ToCharArray貌似就是wchar_t类型。
如果使用char[],调试器显示时就会从4开始,但是如果赋值时使用[i-4],它也不会报错,输出时将数组输出也正常!唯一会出问题的时候就是退出调试时,这部分资源会无法回收,本程序就卡死了,而且使用任何终结进程的工具(包括命令行)都会使得系统假死甚至崩溃,严重者蓝屏报错。哎真是太可怕了。
至于前辈这个方法我还是初学者,没用过啊,求教使用方法
补充:.NET技术 , VC.NET