局部CString的简单问题

xmrforever 2009-02-23 05:26:13
我在树型控件做了一个双击响应事件如下

void CJwyCommDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i;
m_hTreeItem = m_Tree.GetSelectedItem();
CString m_mYear,m_mMonth,m_mDay,m_mHour,
m_mMinite,m_mStr,m_mFile,
CString Str = m_Tree.GetItemText(m_hTreeItem);
char *pStr = new char[13];
sprintf(pStr,"%s",Str);
for (i=0;i<13;i++)
{
if(i<4)
m_mYear.Format("s",pStr); //1
.
.
.
}

运行后没有报错,双击树型控件的文件名就会出错,后来单步调试了一下,发现程序运行到1时,m_mYear并没有值,在调试窗口下显示的错误是:Error:symbol "m_mYear" not found,请问这是什么问题啊?
...全文
164 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoliu0808 2009-02-24
  • 打赏
  • 举报
回复
你调试的时候运行到1那一行m_year肯定没有值,你必须再按一下单步执行执行到下一步才能看到m_year的值
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
语法上的错误属于笔误
Rebuild All就可以看到结果了
fm810 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 xmrforever 的帖子:]
我在树型控件做了一个双击响应事件如下
C/C++ code

void CJwyCommDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i;
m_hTreeItem = m_Tree.GetSelectedItem();
CString m_mYear,m_mMonth,m_mDay,m_mHour,
m_mMinite,m_mStr,m_mFile,
CString Str = m_Tree.GetItemText(m_hTreeItem);
char *pStr = new char[13];

[/Quote]
这段代码里应该至少有三个错误:
1.“m_mFile,”应该是“m_mFile;”吧
2.“m_mYear.Format("s",pStr);”应该是“m_mYear.Format("%s",pStr);”
3.你只为pStr申请了13个字节,那若是CString Str的值大于13个字节,那就会有可能改写其它变量的内存。

对于你的问题,如下建议:
1.修正软件中的BUG
2.Clear All
3.Rebuild All
chaoliu0808 2009-02-23
  • 打赏
  • 举报
回复

m_mYear.Format("%s",pStr); //1 加个%试试
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chaoliu0808 的回复:]
CString类型的显示是不是乱码,像十六进制的
还有你前面pStr 和 Str 都获取到值了吗?
[/Quote]
CString类型什么都没显示,现在调试的时候显示cannot display value
pStr、Str都获得值了,而且程序运行的也很正常
chaoliu0808 2009-02-23
  • 打赏
  • 举报
回复
CString类型的显示是不是乱码,像十六进制的
还有你前面pStr 和 Str 都获取到值了吗?
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
CString类型的变量在调试的时候cannot display value
是什么原因?
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 erac 的回复:]
CString m_mYear,m_mMonth,m_mDay,m_mHour,
m_mMinite,m_mStr,m_mFile,
CString Str = m_Tree.GetItemText(m_hTreeItem);
应该是m_mFile;而不是m_mFile,吧……
[/Quote]
这个是笔误,不是这个原因
我发现不光是这个函数里的CString类型的是这个情况
其他的CString类型的变量调试时也看不到值
Y神圣 2009-02-23
  • 打赏
  • 举报
回复
CString m_mYear,m_mMonth,m_mDay,m_mHour,
m_mMinite,m_mStr,m_mFile,
CString Str = m_Tree.GetItemText(m_hTreeItem);
应该是m_mFile;而不是m_mFile,吧……
chunyemener 2009-02-23
  • 打赏
  • 举报
回复
不应该这样啊,帮你顶一下吧
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
楼上的想法和我一样,调试了一下午都没有结果
单步调试的就是上面一段代码,断点就设在那里
可就不是自己预想的结果
sxbwelcome 2009-02-23
  • 打赏
  • 举报
回复
可能你单步调试的不是上面一段代码
否则不可能,
如果使用了未经定义的变量,编译就通不过
从你的描述看编译肯定是没有问题的
xmrforever 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 CS_DN_Sniper 的回复:]
首先保证你编译选项为debug
你的编译优化可能太多
[/Quote]
是debug
第二句何解?
三文鱼也会飞 2009-02-23
  • 打赏
  • 举报
回复
首先保证你编译选项为debug
你的编译优化可能太多

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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