求助 CString”转换为“const char *”怎么转换


我用的visual studio 2005  
创建的一个工程,就是简单的一个对话框,输入一个字符串,点确定按钮,返回长度, 
CString s1;
CString s2;
CMyString mstr;
m_edit1.GetWindowTextW(s1); 

       
  char   *   pNumber;   
  strcpy(pNumber,s1);  
     
int x=mstr.GetLength(pNumber);
s2.Format(_T("%d"), x);
m_edit2.SetWindowTextW(s2);

长度的函数是

int CMyString::GetLength(char *t)
{

  int len=0; 
      for(int i=0;t[i]!='\0';i++) 
      len++; 
      return len;
}

错误 1 error C2664: “strcpy”: 不能将参数 2 从“CString”转换为“const char *” c:\documents and settings\lupeng\my documents\visual studio 2005\projects\abc\abc\abcdlg.cpp 104

不知道怎么个转换

17 个解决方案

#1


强制转换..const_cast,,由非const转换为const应该是安全的

#2


#include <string>
#include <iostream>

using namespace std;

int main()
{
string s = "abc";
const char *_s;
_s = s.c_str();
cout<<_s;
return 0;
}

#3



strcpy(pNumber,s1);   

->

strcpy(pNumber,s1.GetBuffer());   

#4


用LPCTSTR(CString的对象)或者CString的对象.GetBuffer(0)

#5


引用 3 楼 Chiyer 的回复:
C/C++ code
strcpy(pNumber,s1);   

->

strcpy(pNumber,s1.GetBuffer());   


不对啊,

错误 1 error C2664: “strcpy”: 不能将参数 2 从“wchar_t *”转换为“const char *” c:\documents and settings\lupeng\my documents\visual studio 2005\projects\abc\abc\abcdlg.cpp 104

#6


我晕,你还是宽字符的
得用 _tcscpy

#7


char dest[256];
sprintf(pdest, "%S", (LPCTSTR)s1);
strcpy(pNumber,dest);

VS2005默认使用wchar_t,定义了可移植转换宏TCHAR,同时也定义了一套相应的通用函数,建议楼主查一下msdn,尽量使用各个库函数的通用形式
如 strcpy - wcscpy - _tcscpy
故无需转换,上面的程序可修改为:
#include <tchar.h>
CString s1; 
CString s2; 
CMyString mstr; 
m_edit1.GetWindowTextW(s1);  

        
  char   *   pNumber;    // char改为TCHAR
  strcpy(pNumber,s1);   // strcpy改为_tcscpy,CString可自动转换为LPCTSTR(这里定义为CONST WCHAR*)
      
int x=mstr.GetLength(pNumber); 
s2.Format(_T("%d"), x); 
m_edit2.SetWindowTextW(s2); 

//长度的函数是 
int CMyString::GetLength(char *t) // char修改为TCHAR


  int len=0;  
      for(int i=0;t[i]!='\0';i++)  
      len++;  
      return len; 

#8


CString::GetBuffer()

#9


up

#10



    TCHAR pNumber[128];    
    _tcscpy(pNumber, s1.GetBuffer());   

#11


wcstombs()用这个函数就OK了。

#12


(char*)(const char*)s1
还是(const char*)(char*)s1
我一直这样转换的。

#13



CString cstr("test");
const char* pCh = (LPSTR)(LPCTSTR)cstr;

#14



CString cstr("test");
const char* pCh = (LPSTR)(LPCTSTR)cstr;

#15


呵呵 这么久远

#16


非常讨厌mfc的宽字符。。。
每次我都用多字符

#17


把项目属性里的常规-》字符集  改成使用多字节字符集  试试
我2008是这样改的

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com