我在一个MFC工程中加入了Timer机制,为了显示出经过的秒数,需要将一个整型变量显示在消息框上.但是MessageBox前两个函数却是LPCTSTR类型的.
我写了以下代码:
在类CMyDlg中定义了一个int a,而且SetTimer语句的前面将其赋为0,
而且在OnTime事件中将其加1;
char b[1];
itoa(a,b,10) //将整数转化成字符串,
然后是以下代码:
MessageBox((LPCTSTR)b,_T("提示"));
在第一次显示出对话框时,为什么第一个字符是数字,以后的字符全是朝鲜文呢?
还有第二次显示这个对话框时,就会出错

解决方案 »

  1.   

    int a=5;
    char b[1];
    itoa(a,b,10); //将整数转化成字符串,
    CString msg;
    msg.Format(_T("%s"),b);
    MessageBox(msg,_T("提示"));
      

  2.   

    char b[1];    // 这里错了!这是个大小只有1的字符串数组
    itoa(a,b,10) //将整数转化成字符串.  -- 你这里要转化成10个字节,那么就要越界了
    然后是以下代码:
    MessageBox((LPCTSTR)b,_T("提示"));
    ============================================
    何必这么麻烦啊?
    这样
    CString strNumber;
    strNumber.Format("%d", a);
    MessageBox(strNumber, _T("提示"));
      

  3.   


    其实,楼主的问题是如何把一个数转换成可以显示的字符串的问题。下面列子使用 CString 类进行转换:////////////////////////////////////////////////////////////int i = 100;
    CString strNumber;strNumber.Format( "The number is: %d" , i );////////////////////////////////////////////////////////////
      

  4.   

    多谢Azureus的发言,原来使用CString可以避免数组越界问题,这下长见识了.我原本以为LPCTSTR只能存储常量呢.修改后的关闭计时器代码如下:
    void CMySinDlgDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {


    //将整数转化成字符串,
    CString msg;
    msg.Format(_T("%d"),a);
    MessageBox(msg,_T("提示"));
    if(!this->KillTimer(IDT_TIMER))
    {
    TRACE0("关闭计数器失败!\n");
    }
    }
    void CMySinDlgDlg::OnTimer(UINT_PTR nIDEvent)
    {
    a++;
    }
    void CMySinDlgDlg::OnRButtonDown(UINT nFlags,CPoint point)
    {
    a=0;
    this->SetTimer(IDT_TIMER,500,NULL);
    }
      

  5.   

    LPCTSTR楼主你可以看一下,
    typedef const TCHAR * LPCTSTR
    这个类型其实是常量字符串指针你在使用的时候,其实是给了一个字符数组的地址
    一定要注意区别字符串和字符数组,注意相似之处与不同之处.还有就是说原来使用CString可以避免数组越界问题,也不能这样说.
      

  6.   

    嗯。在这里又学到东西了啊。CSDN真好