我在一个MFC工程中加入了Timer机制,为了显示出经过的秒数,需要将一个整型变量显示在消息框上.但是MessageBox前两个函数却是LPCTSTR类型的.
我写了以下代码:
在类CMyDlg中定义了一个int a,而且SetTimer语句的前面将其赋为0,
而且在OnTime事件中将其加1;
char b[1];
itoa(a,b,10) //将整数转化成字符串,
然后是以下代码:
MessageBox((LPCTSTR)b,_T("提示"));
在第一次显示出对话框时,为什么第一个字符是数字,以后的字符全是朝鲜文呢?
还有第二次显示这个对话框时,就会出错
我写了以下代码:
在类CMyDlg中定义了一个int a,而且SetTimer语句的前面将其赋为0,
而且在OnTime事件中将其加1;
char b[1];
itoa(a,b,10) //将整数转化成字符串,
然后是以下代码:
MessageBox((LPCTSTR)b,_T("提示"));
在第一次显示出对话框时,为什么第一个字符是数字,以后的字符全是朝鲜文呢?
还有第二次显示这个对话框时,就会出错
char b[1];
itoa(a,b,10); //将整数转化成字符串,
CString msg;
msg.Format(_T("%s"),b);
MessageBox(msg,_T("提示"));
itoa(a,b,10) //将整数转化成字符串. -- 你这里要转化成10个字节,那么就要越界了
然后是以下代码:
MessageBox((LPCTSTR)b,_T("提示"));
============================================
何必这么麻烦啊?
这样
CString strNumber;
strNumber.Format("%d", a);
MessageBox(strNumber, _T("提示"));
其实,楼主的问题是如何把一个数转换成可以显示的字符串的问题。下面列子使用 CString 类进行转换:////////////////////////////////////////////////////////////int i = 100;
CString strNumber;strNumber.Format( "The number is: %d" , i );////////////////////////////////////////////////////////////
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);
}
typedef const TCHAR * LPCTSTR
这个类型其实是常量字符串指针你在使用的时候,其实是给了一个字符数组的地址
一定要注意区别字符串和字符数组,注意相似之处与不同之处.还有就是说原来使用CString可以避免数组越界问题,也不能这样说.