文章目录:
- 1、mfc unicode 获取网页源码乱码如何解决
- 2、如何判断CString对象是否为空
- 3、vc中文显示乱码
- 4、c++ cstring排序源码
- 5、MFC中CString赋值出错
- 6、在MFC中,怎么把CString写入文件???
mfc unicode 获取网页源码乱码如何解决
返回的结果需要进行转换一下,如下:
CString adr = _T("网址");
CString text = GetHttpFileData(adr);
USES_CONVERSION;
LPSTR pStr = (LPSTR)text.GetBuffer();
LPTSTR ptStr = A2T(pStr);
text.ReleaseBuffer();
MessageBox(ptStr);
运行结果:
如何判断CString对象是否为空
CString str1 = "VC源码网";
if(str1 != NULL)
{
AfxMessageBox("str1为空");
}
esle
{
AfxMessageBox("str1不为空");
}
因为str1它是一个CString对象,而不是一个指针,将一个对象和NULL指针做比较显然是不合适的。
有朋友要问,出了IsEmpty()函数,还有没有其他方法判断CString字符串为空呢?有,我们介绍一个效率较低的方法:
CString str1 = "VC源码网";
if (x != "")
{
AfxMessageBox("str1不为空");
}
else
{
AfxMessageBox("str1为空");
}
vc中文显示乱码
CString类支持编码转换,使用CString完全没有必要使用MultiByteToWideChar,因为这里面已经内置的转换了。
如果你的工程是UNICODE模式,那么str=charpoint的时候,转换就已经发生。如果不是,那么只要资源中指定中文字符集,那么显示多字节的中文也是没有问题的。
CString类的源码如下:
#ifdef _UNICODE
const CString CString::operator=(LPCSTR lpsz)
{
int nSrcLen = lpsz != NULL ? lstrlenA(lpsz) : 0;
AllocBeforeWrite(nSrcLen);
_mbstowcsz(m_pchData, lpsz, nSrcLen+1);//这个就是MultiByteToWideChar
ReleaseBuffer();
return *this;
}
#else //!_UNICODE
const CString CString::operator=(LPCWSTR lpsz)
{
int nSrcLen = lpsz != NULL ? wcslen(lpsz) : 0;
AllocBeforeWrite(nSrcLen*2);
_wcstombsz(m_pchData, lpsz, (nSrcLen*2)+1);
ReleaseBuffer();
return *this;
}
#endif //!_UNICODE
建议你,还是检查一下MYSQL里面保存的字符串,是如何定义的字段属性,从这里查起。
c++ cstring排序源码
#includevector
#includestring
#includeiostream
using namespace std;
struct string3
{
string str1;
string str2;
string str3;
string3(const char* s1,const char* s2,const char* s3):
str1(s1),
str2(s2),
str3(s3)
{};
};
bool scom(string3 lhs,string3 rhs)
{
if (lhs.str1!=rhs.str1)
return lhs.str1rhs.str1;
if (lhs.str2!=rhs.str2)
return lhs.str2rhs.str2;
return lhs.str3rhs.str3;
};
int main()
{
vectorstring3 vs;
string3 tmp("sdfsd","2316","4587");
vs.push_back(tmp);
tmp.str1="PPPP";
vs.push_back(tmp);
tmp.str3="3333";
vs.push_back(tmp);
tmp.str2="0000";
vs.push_back(tmp);
vectorstring3::iterator iter;
cout"排序前:"endl;
for(iter=vs.begin();iter!=vs.end();++iter)
cout(*iter).str1"\t"(*iter).str2"\t"(*iter).str3"\t"endl;
sort(vs.begin(),vs.end(),scom) ;
cout"排序后:"endl;
for(iter=vs.begin();iter!=vs.end();++iter)
cout(*iter).str1"\t"(*iter).str2"\t"(*iter).str3"\t"endl;
return 0;
}
MFC中CString赋值出错
不是不能赋值,这讲起来内容就多了,涉及到C++底层的一些知识。
你现在这种用法是把struct ABC当做一种数据结构来用,当然针对struck结构
ABC *p=(ABC*)malloc(sizeof(ABC));
p-str=s;
这种用法是无可厚非的,毛病出在你在这个struck里定义了一个类对象CString,
在C++有关构造函数的知识里,一个类A里如果包含有B类的对象,那么在这个A类定义对象时,编译器会在A类的构造函数里调用B的构造函数。
好了,矛盾出来了,struct ABC你是当结构体用的,没有所谓的构造函数,那么结构体里的str就没被构造,所以就会出现很多问题,具体出在哪我也不知道,那得去看CString源码。
由此,有二种改法,一个是把malloc改成new,一个是把CString改成内置类型,比如说char
在MFC中,怎么把CString写入文件???
BOOL CnewoneDlg::OutputBase(void)
{
// 1 组合到总字符串strSum中
CString strSum = _T(""), strTmp;
for(int i=0; i50; i++)
{
strTmp.Format(_T("\r\n\r\n%d."), i);
strSum += strTmp;
strSum += _T("\r\n Sex: ") + A[i].Sex;
strSum += _T("\r\n Num: ") + A[i].Num;
strSum += _T("\r\n Name: ") + A[i].Name;
strSum += _T("\r\n Adress:") + A[i].Adress;
strSum += _T("\r\n QQ: ") + A[i].QQ;
strSum += _T("\r\n Phone: ") + A[i].Phone;
}
// 2 写入文件
CFile cf;
if(!cf.Open(_T("D:\\TXL.TXT"), CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox(_T("D:\\TXL.TXT \r\n Open failed when write."));
return FALSE;
}
int len = strSum.GetLength()
cf.Write(strSum.GetBuffer(len), len);
cf.Close();
strSum.ReleaseBuffer();
return TRUE;
}
void CnewoneDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
OutputBase();
EndDialog(1);
}
没有其他源码, 没有编译, 可能有些小错误, 楼主自己排排
begin(),vs.end(),scom) ; cout"排序后:"endl; for(iter=vs.begin();iter!=vs.end();++iter) cout(*iter).str1"\t"(*ite
!_UNICODE建议你,还是检查一下MYSQL里面保存的字符串,是如何定义的字段属性,从这里查起。c++ cstring排序源码#includevector#includestring#includeiostreamusing namespace std;struct string
,怎么把CString写入文件???mfc unicode 获取网页源码乱码如何解决返回的结果需要进行转换一下,如下:CString adr = _T("网址");CString text = GetHt
hs.str3;};int main(){ vectorstring3 vs; string3 tmp("sdfsd","2316","4587"); vs.push_back(tmp); tmp.s
return FALSE; } int len = strSum.GetLength() cf.Write(strSum.GetBuffer(len), len); cf.Close(); strSum.ReleaseBuffer(); ret