刚接触C,请教如何在结构体数组中使用指针
偶在结构体数组中使用了指针,
使用“方式1”,直接赋初值,编译执行通过;
使用“方式2”,动态赋值,编译通过,但结果不正确,假设 3 次赋值依次为 {"STR1",1},{"STR2",2},{"STR3",3},输出结果均为"STR3";
刚接触C,完全靠摸着石头过河,还望指教。
struct LVItems{ TCHAR *szKey; int num;};BOOL Method(void){ /* // 方式1 // 直接赋初值,编译执行通过 struct LVItems lvitems[5]={ {"STR1",1}, {"STR2",2}, {"STR3",3} }; // 方式1 结束 */ // 方式2 struct LVItems lvitems[5]={0};//好象应该在此处分配内存吧? /* 定义指针数组 */ struct LVItems *k[5]; struct LVItems *p; p = lvitems; int i; BOOL bResult = TRUE; for(i=0;i<3;i++) { TCHAR *szKey=(TCHAR*)malloc(_MAX_PATH + 1);// 在是此处分配内存吗? TCHAR szValueName[_MAX_PATH + 1]; //... 此处生成 szValueName // 动态赋值,编译通过,但结果不正确 lvitems[i].szKey=szValueName; // ok lvitems[i].num=i; //strcpy(p->szKey,szValueName); // error,这里如何修正才能替代上两行代码 //p->num=i; // 将指针放入指针数组 k[i] = p; p++; } // 方式2 结束 // 输出结果 for(p=lvitems;p<lvitems+3;p++) MessageBox(NULL,p->szKey,"Key",MB_OK); return bResult;}
p->szKey=(TCHAR*)malloc(_MAX_PATH + 1);//lvitems[i].szKey=szValueName; // ok//lvitems[i].num=i;strcpy(p->szKey,szValueName); // error,这里如何修正才能替代上两行代码p->num=i;