刚接触C,请教如何在结构体数组中使用指针

Qiaorui 2012-07-09 01:07:33
偶在结构体数组中使用了指针,
使用“方式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;
}


...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qiaorui 2012-07-09
  • 打赏
  • 举报
回复
TCHAR p[i].szKeyszKey=(TCHAR*)malloc(_MAX_PATH + 1);

mingw编译错误,1楼正解
Universe_Admin 2012-07-09
  • 打赏
  • 举报
回复

for(i=0;i<3;i++)
{
//TCHAR *szKey=(TCHAR*)malloc(_MAX_PATH + 1);// 在是此处分配内存吗? 这里分配有误,改正如下:
TCHAR p[i].szKeyszKey=(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,这里如何修正才能替代上两行代码
strcpy(p[i].szKey,szValueName);
//p->num=i;
p[i].num=i;

// 将指针放入指针数组
k[i] = p;
p++;
}
CS1024 2012-07-09
  • 打赏
  • 举报
回复

p->szKey=(TCHAR*)malloc(_MAX_PATH + 1);

//lvitems[i].szKey=szValueName; // ok
//lvitems[i].num=i;
strcpy(p->szKey,szValueName); // error,这里如何修正才能替代上两行代码
p->num=i;

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧