找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1131|回复: 16

[求助]:结构体的存储和访问问题

[复制链接]
发表于 2006-5-18 10:02:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我在一个结构体中存了一些数据(在对话框上一个按钮按下时存在结构体上)
为什么在其他的函数调用时用这个结构体时数据出错呢
有没有办法解决啊
望高手帮忙
struct data *p2;
void CDlgmg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
struct data data1;
struct data *p;
p=&data1;
       
        strcpy(p->ToolSupport,"你好");
        p2=p;
       
}
void print()
{
        acutPrintf(p2->ToolSupport );
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-18 10:48:37 | 显示全部楼层
目前还没有采用结构体,将来我想也会采用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-19 12:02:21 | 显示全部楼层
p2指针是全局变量,但他指向的p、p指向的data1都是局部变量。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-19 12:11:22 | 显示全部楼层
最初由 xysyr 发布
[B]p2指针是全局变量,但他指向的p、p指向的data1都是局部变量。 [/B]

那怎么解决我再次访问的问题啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 00:31:59 | 显示全部楼层
坚决禁止写出这样的函数,程序是给人看的,机器是不会晕的,你自己就晕了,好好学学编程规范
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 09:47:15 | 显示全部楼层
struct data *p2;
void CDlgmg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
struct data data1;
struct data *p;
p=&data1;

strcpy(p->ToolSupport,"你好");
p2=p;

}
void print()
{
acutPrintf(p2->ToolSupport );
}

>>>> 楼主的代码"相当"有问题, 感觉楼主应该补补基本功了。楼主犯了一些很严重的错误:
1.用指针指向分配在栈上的变量,要知道栈上的变量会随着函数的返回自动释放的。所以你的那个全局变量p2就成了一个非法的值.
2.strcpy()是用来复制char类型的字符串,而"你好"很明显不是char类型的字符串,很显然strcpy()不能进行正常的复制。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-5-20 10:00:02 | 显示全部楼层
//要实现你的功能,我认为应该如下写:
struct data *p2;//p2应该分配空间,或者直接 struct data p2;
//data应该公布出来,也许还有其他错误
void CDlgmg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
struct data data1;
//struct data *p;//没有必要这样写
//p=&data1;

strcpy(data1.ToolSupport,"你好");
//p2=p;
memcpy(p2,&data1,sizeof(data));//若p2不是指针 memcpy(&p2,&data1,sizeof(data))
}
//其实可以将p2的地址直接传到CDlgmg内
void print()//使用与C相同的函数print,容易误读
{
acutPrintf(p2->ToolSupport );//或者acutPrintf(p2.ToolSupport )
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-20 11:27:56 | 显示全部楼层
呵呵,谢谢大家的批评和帮忙
我比较菜,一般多是仿照别人的程序写的
不过strcpy() 函数复制好象没问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 11:53:02 | 显示全部楼层
呵呵,这是一般的工司招人时常用的面试题型啊!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-20 14:16:33 | 显示全部楼层
我按7楼说的编译能通过,谢谢
随便问下,如果   "你好"  改成   实数10.111
有什么要注意的没
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-20 18:49:33 | 显示全部楼层
不过strcpy() 函数复制好象没问题
>>>> 你很不幸。可能你现在还不理解为什么不幸,但是当你把你的程序拿给用户用的时候,用户打电话说出现了很多乱码的时候你就会明白了。

随便问下,如果 "你好" 改成 实数10.111
有什么要注意的没
>>>> strcpy()不能进行UNICODE字符串的操作。可以使用AcString(ObjectArx)或者CString(MFC),或者std::wstring(STL),这些都可以进行UNICODE字符串的操作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-20 20:22:45 | 显示全部楼层
houdy 老大  你能不能每次都说的详细呢
帮我发现了问题  顺便  解决下呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-5-21 09:39:02 | 显示全部楼层
//希望将data的定义贴出来
//如果:
struct data{
char  ToolSupport[64];
....
} data;
//则:
strcpy(data1.ToolSupport,"你好");
double a=10.111 ;
sprintf(data1.ToolSupport,"%.3lf",a);

//如果:
struct data{
CString   ToolSupport;
....
} data;
//则:
strcpy(data1.ToolSupport,"你好");
double a=10.111 ;
data1.ToolSupport.Format("%.3lf",a);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-21 10:26:50 | 显示全部楼层
struct data
   {
        char  ToolSupport[10];//存  左刀架  或 右刀架 这里用Cstring  ToolSupport 是不是好  
        int   ToolNumber;    //  存  1  2  3  4
        char  Rotate[10];      //  逆时针  或  顺时针
        char  ChangeTool[10];
        char  Coolant[10];
        float CutDepth;    //   10.5之类
        float CutAllow;
        float Speed;//200.50之类
        float Feed;
        char  Instruction[20];
   };//    有什么好的 struct 的定义方法没

                     这些数据都是从对话框上去的(按下ok键就存
我用
GetDlgItem(IDC_TOOLSUPPORT)->GetWindowText (strToolSupport);
        strcpy(data1.ToolSupport,strToolSupport);//如果是CString ToolSupport  这样付值也行吗?
的方法取对话框上的数据并存到struct 上(或者有更好的方法)

                     float CutDepth;
        float CutAllow;
        float Speed;
        float Feed;等数据的存储和  "你好"( ToolSupport)的存储有什么区别(最好帮我写出具体的方法,我很菜的都是仿照别人写,自己不会.谢谢了)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-22 20:24:18 | 显示全部楼层
哦,小程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 07:19 , Processed in 0.238238 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表