用在一个系统里用了
CString buf;
int i;
buf.Format("%d",i);
在用的时候i是赋了值的。但是运行中会出错。
请问该怎么修改才可以提高它的稳定性。或者如果拦截这样的错误?
如改成
char buf[256];
int i;
springf(buf,"%d",i);
又会怎样?
谢谢。
CString buf;
int i;
buf.Format("%d",i);
在用的时候i是赋了值的。但是运行中会出错。
请问该怎么修改才可以提高它的稳定性。或者如果拦截这样的错误?
如改成
char buf[256];
int i;
springf(buf,"%d",i);
又会怎样?
谢谢。
解决方案 »
- RSA签名要怎么实现?把一个文件RSA签名生成256bytes的数据要怎么做?
- 用VC做一个网络监测器
- 如何通过进程句柄获得进程的详细信息?
- #include <iostream.h>和#include <iostream>有什么不同
- 在FORMVIEW上放一个STATIC,想在这个STATIC上画图,总是不成功,请问为什么,怎么解决?!
- 请教 声卡编程的怪异问题
- 如何在一个对话框中调用另一个对话框中已经附值的变量???!!
- 请问各位大虾,socket通信是什么意思?能用纯c\c++实现socket编程吗?
- 请帮忙看看关于ISAPI的问题。
- 这儿是幼儿园
- 用过两年的Delphi,现在想学VC,哪位大侠可以指点迷津,要看那些方面的书
- 一个小项目,寻求合作!!!关于网络扫描和探测方面的!开发费用可以面谈.(要快!!!)
int i;
buf.Format("%d",i);
是不会错的啊
char buf[256];
int i;
springf(buf,"%d",i);
也不会有什么问题 数字的长度不会大于256的
如过不想用的话,用你写的第二种形式也是不错的!
系统提示D:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\STRCORE.CPP
498行出错。
我查STRCORE.CPP是
///////////////////////////////////////////////////////////////////////////////
// Advanced direct buffer accessLPTSTR CString::GetBuffer(int nMinBufLength)
{
ASSERT(nMinBufLength >= 0); if (GetData()->nRefs > 1 || nMinBufLength > GetData()->nAllocLength)
{
#ifdef _DEBUG
// give a warning in case locked string becomes unlocked
if (GetData() != _afxDataNil && GetData()->nRefs < 0)
TRACE0("Warning: GetBuffer on locked CString creates unlocked CString!\n");
#endif
// we have to grow the buffer
CStringData* pOldData = GetData();
int nOldLen = GetData()->nDataLength; // AllocBuffer will tromp it
if (nMinBufLength < nOldLen)
nMinBufLength = nOldLen;
AllocBuffer(nMinBufLength);
memcpy(m_pchData, pOldData->data(), (nOldLen+1)*sizeof(TCHAR));
GetData()->nDataLength = nOldLen;
CString::Release(pOldData);
}
//*******************
ASSERT(GetData()->nRefs <= 1);//出错行
//*********************
// return a pointer to the character storage for this string
ASSERT(m_pchData != NULL);
return m_pchData;
}
我不知在我程序中是如何做产生了这样的错误。
请各位看看,我真的不希望我的程序存在太多BUG了。
毕竟MFC作为一个产品卖了那么久。
后必须ReleaseBuffer吗
搂主的错误好像是有人在调用这个buffer中的数据。应为引用数大于1,所以说明除了format以外还有人在访问该CString中的数据。逻辑上这时的数据是受保护的,所以getbuffer这样危险的操作就会被禁止,所以报错。
我的程序是几个线程对几个CString变量赋值,而有一个线程会不断将这些CString变量赋值给另一些变量。
请教各位,如果我不改几个对CString变量赋值线程,在取这些CString变量的线程里能不能通过什么东西判断改CSting变量可不可以赋值给别的变量。
分不够我在加。
LPCRITICAL_SECTION lpCriticalSection // address of critical
// section object
);VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection // pointer to critical
// section object
);
VOID LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection // address of critical
// section object
);
请各位大哥写个源码给我好不好,谢谢了。
有一个定时器,定时将这些状态显示到界面上。
这样就产生了我在上面说的问题,我要完成这样的功能该这么来做比较安全勒?
应用CCriticalSection类。在存储状态和读取状态时设定临界区。
如:
CCriticalSection cLock;
CString Stat;
...
cLock.Lock();
Stat = "Busy!";
cLock.Unlock();
...
cLock.Lock();
CString Temp = Stat;
cLock.Unlock();
...
CString::Format()挺好用的