函数指针问题下面是函数体 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呢
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呢
解决方案 »
- MFC 如何制作类似PS中的图层
- [急切求助]从网上下载的屏幕录象程序不能同时录制画面和声音???
- vc compil.h error c2227错误的问题
- 位图(BMP)转为HEX字符串
- 一个从_variant_t到其他类型变量的转换函数vartostr()的怪异问题
- goto 到最下边为什么是死循环。。。我查msdn也是这样写的呀。大家进来看看
- 请教监测本地连结是否连通的办法,在线等待
- activex 无法在本地机器的网页中显示
- fatal error C1010: ......是什么错误呀?
- 实现多行存取时遇到的问题
- 奇怪的问题:DataGrid控件的表头为什么只有两列?分数用完了!
- 如何实现 指定文件路径 的对话框?
改成
BOOL CTESTUSBDlg::ReadTotalCable( CString &strTotalCable )
好像还应该:ReadTotalCable( CString strTotalCable )写为ReadTotalCable( CString &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就可能会重新分配地址,
上面的ReadTotalCable( CString strTotalCable )
这个函数也是做了一个赋值strTotalCable = chbuffer
为什么要使用引用了???
为什么函数结束了 strTotalCable 不变
而用引用则可以了