Visual c++ visualc&x2B+;运行时错误 所有病例在Visual C++ 2005环境下运行

Visual c++ visualc&x2B+;运行时错误 所有病例在Visual C++ 2005环境下运行,visual-c++,Visual C++,功能定义: char *PQgetvalue(const PGresult *res, int tup_num, int field_num); 案例1. CString dd; dd=(LPCTSTR) PQgetvalue(res,i,0); CString dd; dd= PQgetvalue(res,i,0); CString dd; dd= PQgetvalue(res,i,0); CString dd = PQgetvalue(res,i,0); 当上面的代码编译时没有错误

功能定义:

char *PQgetvalue(const PGresult *res, int tup_num, int field_num);
案例1.

CString dd;
dd=(LPCTSTR) PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);

CString dd = PQgetvalue(res,i,0);
当上面的代码编译时没有错误,但是
dd
存储了垃圾数据,如:
〱〰71〱1.몭몭몭몭몭몭ꮫꮫꮫꮫ

案例2.

CString dd;
dd=(LPCTSTR) PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);

CString dd = PQgetvalue(res,i,0);
无编译错误,并提供正确的输出

问题:如何将
Char*
转换为
CString

案例3.

CString dd;
dd=(LPCTSTR) PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);
CString dd;
dd= PQgetvalue(res,i,0);

CString dd = PQgetvalue(res,i,0);
以上代码之间没有区别。但第二种情况会产生编译错误,如:

error C2440: 'initializing' :
cannot convert from 'char *' to 'ATL::CStringT<BaseType,StringTraits>'
错误C2440:“正在初始化”:
无法从“char*”转换为“ATL::CStringT”

请澄清第一个案例中的任何人。我想您应该使用Unicode字符集编译项目(以验证打开的项目设置对话框“配置属性”-“常规”-“字符集”)。因此,将char*转换为const wchar\u t*会产生垃圾。也就是说,使用Unicode编译时,TCHAR是wchar


在C2440上。请澄清案例3中的代码是否正确(即,您按照此处提供的方式向编译器提供所有3行代码)。此外,我建议您搜索MSDN中的此错误。

在案例3中,您声明了两次名为dd的变量。是在这里如此还是这是有错误的情况(即3行)?区别在于情况1中的转换。您正在告诉编译器您比它更了解。错误消息应该会告诉您出了什么问题。不能使用char指针初始化CString;您需要一个wchar\t指针。