函数指针问题下面是函数体 strTotalCable是一个 输出的变量
BOOL CTESTUSBDlg::ReadTotalCable( CString strTotalCable )
{
CFile FileReadTotalCable;
char chbuffer[128]; //read file buffer
memset( chbuffer, 0, sizeof( chbuffer )); if ( !FileReadTotalCable.Open( "Total.txt", CFile::modeReadWrite,NULL )) //open fail
{
AfxMessageBox(" Init Error ",MB_ICONSTOP|MB_OK,NULL);
return FALSE;
}
else // open pass
{
FileReadTotalCable.Read(chbuffer, sizeof(chbuffer));
FileReadTotalCable.Close();
strTotalCable = chbuffer;
return TRUE;
}
}
//这里是调用函数的:
// Get the Init the total cable from file
CString strTotalCable;
if (ReadTotalCable(strTotalCable))
{
m_cTotalCable.SetWindowText(strTotalCable); 
}现在问题是 调用函数的时候  定义strTotalCable的时候
strTotalCable.m_phdata 的地址为0x5f4ccb14
进入函数体后 strTotalCable.m_phdata 还是0x5f4ccb14
但是函数体里定义char chbuffer[128]; chbuffer的地址为0x006af3ac
在执行完FileReadTotalCable.Read(chbuffer, sizeof(chbuffer))后
chbuffer内容为"3"而在执行完strTotalCable = chbuffer; 这句话后
strTotalCable.m_phdata 的地址改变为0x007d1ecc  , 为什么不等于chbuffer的地址0x006af3ac呢
                 

解决方案 »

  1.   

    BOOL CTESTUSBDlg::ReadTotalCable( CString strTotalCable )
    改成
    BOOL CTESTUSBDlg::ReadTotalCable( CString &strTotalCable )
      

  2.   

    CString的= 是赋值
    好像还应该:ReadTotalCable( CString strTotalCable )写为ReadTotalCable( CString &strTotalCable )
      

  3.   

    现在问题是 调用函数的时候  定义strTotalCable的时候
    strTotalCable.m_phdata 的地址为0x5f4ccb14
    进入函数体后 strTotalCable.m_phdata 还是0x5f4ccb14
    但是函数体里定义char chbuffer[128]; chbuffer的地址为0x006af3ac
    在执行完FileReadTotalCable.Read(chbuffer, sizeof(chbuffer))后
    chbuffer内容为"3"而在执行完strTotalCable = chbuffer; 这句话后
    strTotalCable.m_phdata 的地址改变为0x007d1ecc  , 为什么不等于chbuffer的地址0x006af3ac呢CString 在赋值后会拷贝源内容到自已的存储空间,这是正常的。
    如果新内容的长度超过了以前分配缓冲区长度,CString就可能会重新分配地址,
      

  4.   

    那么在问一下
    上面的ReadTotalCable( CString strTotalCable )
    这个函数也是做了一个赋值strTotalCable = chbuffer
    为什么要使用引用了???
    为什么函数结束了  strTotalCable 不变
    而用引用则可以了