cstring源码_cstring中文

hacker|
163

文章目录:

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

如何判断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写入文件???

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);

}

没有其他源码, 没有编译, 可能有些小错误, 楼主自己排排

mfc unicode 获取网页源码乱码如何解决

返回的结果需要进行转换一下,如下:

CString adr = _T("网址");

CString text = GetHttpFileData(adr);

USES_CONVERSION;

LPSTR pStr = (LPSTR)text.GetBuffer();

LPTSTR ptStr = A2T(pStr);

text.ReleaseBuffer();

MessageBox(ptStr);

运行结果:

2条大神的评论

  • avatar
    访客 2022-07-12 上午 02:56:41

    trSum += _T("\r\n QQ:    ") + A[i].QQ;        strSum += _T("\r\n Phone: ") + A[i].Phone;    }    // 2 写入文件    CFile cf;    if(!cf.Open(_T("D:\\TXL.

  • avatar
    访客 2022-07-12 上午 08:45:00

    .TXT \r\n Open failed when write."));        return FALSE;    }    int len = strSum.GetLength()    

发表评论