CString to char* 为什么不能转

cw_ee168 2009-09-23 09:44:15
int CXSocket::get_ip_address(const CString &sHostName, CString &sIpAddress)
{
struct hostent FAR * lpHostEnt = gethostbyname(sHostName);
...
}
我编译的时候出错:gethostbyname”: 不能将参数 1 从“const CString”转换为“const char *”
我编译别人写的就没有出错,不知道什么原因,还有什么头文件?

我另外想办法
char nstring[50];
strcpy(nstring,sHostName); //“strcpy”: 不能将参数 2 从“const CString”转换为“const char *” strcpy(nstring,(LPTSTR)(LPCTSTR)sHostName); //“strcpy”: 不能将参数 2 从“LPTSTR”转换为“const char *”
strcpy_s(nstring, sHostName); //“strcpy_s”: 2 个重载中没有一个可以转换所有参数类型

这三种方法都报错
望高手指点指点啊
...全文
1251 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cityboyloving 2010-01-07
  • 打赏
  • 举报
回复
就是字符集的问题
工程属性里面设置
有的是unicode有的不是
norsd 2010-01-07
  • 打赏
  • 举报
回复
别那么麻烦了!
还用什么WideCharToMultiByte,太麻烦了.
各位:
hostname 是什么? 是host name啊 , 里面不可能有非ascii字符,比如中文,日文.
所以..............
有一个 %S flag. 他们就是把2字节ascii变成1字节ascii,或者1字节ascii变成2字节ascii
所以:
//以下从wchar->char
sprintf( strRet , "%S" , wcsSource ) ;
//以下从char->wchar
wsprintf( wcsRet , "%S" , strSource ) ;

p.s: wcs 代表 WCHAR[] , str代表 char[]




aoyihuashao 2010-01-07
  • 打赏
  • 举报
回复

CString转换为char* ch;
ch=cstr.GetBuffer(cstr.GetLength());
ch=(LPCSTR)cstr;
ch = (char*)(LPCSTR)cstr;
ch = (char*)(LPCTSTR)cstr;
ch = (LPSTR)(LPCTSTR)cstr;

char* BasicFunction::StringToCharX(CString str)
{
int len = WideCharToMultiByte( CP_ACP , 0 , str , str.GetLength() , NULL , 0 , NULL , NULL );
char* pAscii =new char[len+1];
len = WideCharToMultiByte( CP_ACP , 0 , str , str.GetLength() , pAscii , len +1 , NULL ,NULL );
pAscii[len] = 0;
return pAscii;
}

CString转换成char[100] a;
strncpy(a,(LPCTSTR)cstr,sizeof(a));

一行乱码 2010-01-07
  • 打赏
  • 举报
回复
gethostbyname(sHostName.GetBuffer(0));
sdh2830 2010-01-07
  • 打赏
  • 举报
回复
我做类似的东西的时候也是报错
koh 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cw_ee168 的回复:]
#4楼
rror C2663: “ATL::CSimpleStringT <BaseType>::GetBuffer”: 2 个重载没有“this”指针的合法转换
[/Quote]

把形参列表第一个的 const 去掉试一试。
幸福官 2009-09-23
  • 打赏
  • 举报
回复
你工程设置是UNICODE字符集吧?
如果是的话用gethostbyname((char*)(LPCTSTR)sHostName);
因为gethostbyname函数需要的参数是char*类型的。
如果不是的话gethostbyname(sHostName.GetBuffer(sHostName.GetLength())); 就应该没问题。
cw_ee168 2009-09-23
  • 打赏
  • 举报
回复
大概知道原因了,可能是5楼提到的

我用的是 Unicode 字符集
原作者用 多字节 字符集
HelloDan 2009-09-23
  • 打赏
  • 举报
回复
getbuffer()

releasebuffer()
cw_ee168 2009-09-23
  • 打赏
  • 举报
回复
#4楼
rror C2663: “ATL::CSimpleStringT<BaseType>::GetBuffer”: 2 个重载没有“this”指针的合法转换
cw_ee168 2009-09-23
  • 打赏
  • 举报
回复
我也喜欢用#3楼的方法

编译没有错误,一个警告,告诉这个函数可能不安全

还是想不明白,同一个编译器,为什么原作者的可以,我的不可以,都是MFC对话框模式的
cw_ee168 2009-09-23
  • 打赏
  • 举报
回复
#1楼
不能将参数 1 从“const CString *”转换为“const char *”
#2楼
“ATL::CSimpleStringT<BaseType>::GetBuffer”: 2 个重载没有“this”指针的合法转换

刚才用gethostbyname((char*)(LPCTSTR)sHostName);获得成功
但是不知道原因
bragi523 2009-09-23
  • 打赏
  • 举报
回复
多字节工程sHostName.GetBuffer()
unicode工程
sHostName.GetBuffer()
再用WideCharToMultiByte()转一下
极速闪电 2009-09-23
  • 打赏
  • 举报
回复
试试:
gethostbyname(sHostName.GetBuffer(sHostName.GetLength()));
flyskytoday 2009-09-23
  • 打赏
  • 举报
回复
大小写?
struct hostent FAR * lpHostEnt = gethostbyname(sHostName);
---------->
HOSTENT* pHost;
pHost=gethostbyname(sHostName);


char nstring[50];
//strcpy(nstring,sHostName);
sprintf(nstring,"%s",sHostName);
huziwu 2009-09-23
  • 打赏
  • 举报
回复
gethostbyname(sHostName.GetBuffer(0));
福尔摩丝 2009-09-23
  • 打赏
  • 举报
回复
gethostbyname(&sHostName); 试下
qjybch 2009-09-23
  • 打赏
  • 举报
回复
getbuffer()

releasebuffer()

或着
CSTRING 先附给STRING型的在做
yangghhdd 2009-09-23
  • 打赏
  • 举报
回复
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow)
cw_ee168 2009-09-23
  • 打赏
  • 举报
回复
谁有更好的,结果正确的方法提出来啊
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧