结构赋值过程中成员变量发生变化的问题。高手===================> 事实上是没有变的,只是你看错了,因为结构体中的成员aa是一个只有一个长度的字符数组,而结构体中的成员地址是连续的,所以在aa[0]后面就是bb[0]。所以bb[0]成为'2'子bb[1]成为'\0'后aa是字符数组是以'\0'结束的就是"12"了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Phourm()回答的好正确.连续的内存地址,字符串以‘\0’结束. 同意楼上的当定义 char aa[1], 就相当于char *指针, 注意字符串是以'\0'结束的。而VC调试器在显示字符串也是这样工作的。如楼上兄台所言,结构体中的成员地址是连续的。而全局变量,系统会自动将它清0. 所以ab初始为: ab[n].aa[0]=0 ab[n].bb[0]=0 ab[n].bb[1]=0 …所以造成aa指向 "1,2,0"看起来就是 "12" 字符串了。 可是我如何正确的进行字符串比较呢?比如当我赋值结束后,想用strcmp(aa,"1")进行比较,但是得到的都是错误结果,如何避免?我总不能使用定长字符比较吧?strncmp(aa,"1",1);?是这样吗? 如Phourm()所说。只是你的空间不够大,不足以存下串“1”。对于一个字节长的字符串,你只比较第一个字符就行了。否则要保证空间足够大,放得下串。 还up干什么呢?你这么定义就行了typedef struct A_B{char aa[2];char bb[3];char cc[4];}aabb;要不,干脆定义成CString吧! 定义typedef struct A_B{ char aa[2]; //大一个 char bb[3]; //.. char cc[4]; //.. }aabb;aabb ab[10];初始for(int i=0; i < 10; i++) memset(&ab[i],0,sizeof(ab[i]));赋值 strcpy(ab[1].aa,"1"); strcpy(ab[1].bb,"22"); 链接后Debug文件夹和Release文件夹的.exe运行时,怎么有些功能不一样? vc怎么调用windows自带的程序组件? 怎样把listctrl的LVS_EX_CHECKBOXES的风格去掉?? DLL中非模式对话框的问题 关于get()!!!???? 请教:为什么我的的客户端在外网连不上我的数据库服务器?加急 我对指针的理解,不知对不对?欢迎各位高手指点! 大家来看看这是什么原因!!100!!急!!! CList插值为什么不能实习那正常排序? 急!急!急!哪里有ado的电子书(vc) 问一个有关SOCKET编程的问题! 如何隐藏和显示控件 -- WebBrowser?
当定义 char aa[1], 就相当于char *指针, 注意字符串是以'\0'结束的。
而VC调试器在显示字符串也是这样工作的。
如楼上兄台所言,结构体中的成员地址是连续的。
而全局变量,系统会自动将它清0.
所以ab初始为: ab[n].aa[0]=0 ab[n].bb[0]=0 ab[n].bb[1]=0 …
所以造成aa指向 "1,2,0"
看起来就是 "12" 字符串了。
比如当我赋值结束后,想用
strcmp(aa,"1")进行比较,但是得到的都是错误结果,如何避免?
我总不能使用定长字符比较吧?
strncmp(aa,"1",1);?是这样吗?
typedef struct A_B{
char aa[2];
char bb[3];
char cc[4];
}aabb;
要不,干脆定义成CString吧!
定义
typedef struct A_B{
char aa[2]; //大一个
char bb[3]; //..
char cc[4]; //..
}aabb;
aabb ab[10];初始
for(int i=0; i < 10; i++)
memset(&ab[i],0,sizeof(ab[i]));
赋值
strcpy(ab[1].aa,"1");
strcpy(ab[1].bb,"22");