原贴见 http://topic.csdn.net/u/20080428/13/e8c60d5a-8fcb-4b51-a697-53a069110c15.html?seed=1056738959,
我在我家里的机器,XP-SP2上安装了VC6(SP6),写了一个函数,
函数形如a(CString src){char* p = src.GetBuffer(0);} 调用a("test string"); 调试时发现p指向空字符串。百思不得其解。于是把整个项目COPY到单位上的机器,同样XP-SP2,VC6(SP6),可编绎后src.GetBuffer(0)居然返回正常! WHY?难道是我下载的两个VC版本有细微差别? 我这可是编绎的同一个项目呀~~ 真是难事了~各位D X帮忙看看这是啥问题 ~多谢了~
我在我家里的机器,XP-SP2上安装了VC6(SP6),写了一个函数,
函数形如a(CString src){char* p = src.GetBuffer(0);} 调用a("test string"); 调试时发现p指向空字符串。百思不得其解。于是把整个项目COPY到单位上的机器,同样XP-SP2,VC6(SP6),可编绎后src.GetBuffer(0)居然返回正常! WHY?难道是我下载的两个VC版本有细微差别? 我这可是编绎的同一个项目呀~~ 真是难事了~各位D X帮忙看看这是啥问题 ~多谢了~
真的! 我怀疑有可能是编绎器版本关系 请问怎样获取 _MSC_VER 这个值? 虽然我两台机器安装的都是 VC6(SP6),但我还是想看看 _MSC_VER 这个值
跟进去看了。LPTSTR CString::GetBuffer(int nMinBufLength)
{
ASSERT(nMinBufLength >= 0); if (GetData()->nRefs > 1 || nMinBufLength > GetData()->nAllocLength)
{到IF这里就跳出了。。
{
CString buf;
if(encoding != GB2312)
ConvertEncoding(src,GB2312,encoding);
char* p = src.GetBuffer(0);
while(true)
{
int ch = (BYTE) (*(p++));
if (ch == '\0') {
break;
}
if (isalnum(ch) || ch == '_' || ch == '-' || ch == '.') {
buf += (char)ch;
}
else if (isspace(ch)) {
buf += '+';
}
else {
char c[16];
wsprintfA(c, "%%%02X", ch);
buf += c;
}
}
src.ReleaseBuffer();
return buf;
};调用 CUtils::EncodeForm("ddd",CP_ACP);返回为空串!调试发现到char* p = src.GetBuffer(0);就指向空了把项目转移到另一台机器编绎运行正常
2. 好象返回局部变量buf不是好的做法,如果返回的是常量,则不会有问题
没,ConvertEncoding(src,GB2312,encoding);去掉了照样会返回空串。