MFC应用,编辑框edit1,对应变量CString m_str;edit2,对应变量CString m_result;
CString temp_result;
void CMyDlg::OnButton1() 
{
UpdateData(TRUE);
     m_result.Format("%s\r\n","两位组合:");
         temp_result=m_result;
m_result.Format("%s\r\n%s",temp_result,m_str[0]);
//m_result.Format("%s\r\n%s",temp_result,temp_result);
    
   
UpdateData(FALSE);
}
这段程续编译连接都没问题,运行后,单击按钮就会出错,为什么呢,若把m_result.Format("%s\r\n%s",temp_result,m_str[0]);换成m_result.Format("%s\r\n%s",temp_result,temp_result);就不会有问题,是因为m_str[0]的类型吗,若是类型问题,编译时应该提示错误的吧,VC如何查看变量的类型呢

解决方案 »

  1.   

    %s是字符串,m_str[0]是字符,改成%c试试
      

  2.   

    m_str存字符串没,是不是啥也没存是空的
      

  3.   

    m_str[0]表示字符串里面的字符如果硬要这么表示可以写成&m_str[0],来取字符串起始指针
      

  4.   

    你前面用了%s说明这边需要的是个地址,而m_str是表示一个内存地址的,通常的32位指针!
    而你现在改成m_str[0]就变成了字符了,假设说m_str[0] == 'A'(65),那么这里的值就是10进制65,指针指为65的肯定是个非法地址,你引用当然崩溃了。改成&m_str[0],或直接m_str就OK
      

  5.   

    编译器不报错,是因为m_str[0] == 'A' == 65==(int)65,理论上是个合法地址
      

  6.   

    一楼说得很清楚,m_str是字符串,在Format()中要用%s,而m_str[0]表示字符串的首字符,Format()中用%c,并且只能取一个字符.