char* file = new char[strlen(lpszPathName)];
strcpy(file, lpszPathName);
错误提示:
error C2664: 'strlen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
error C2664: 'strcpy' : cannot convert parameter 2 from 'LPCTSTR' to 'const char *'
将strlen和strcpy换成 wcslen和 wcscpy之后第一个错误能解决,但是第二个不能解决。

解决方案 »

  1.   

    strlen()strcpy()参数类型不匹配 不是用wcslen和 wcscpy的原因
      

  2.   

    除了语法错误还有个隐含的错误,char* file = new char[strlen(lpszPathName)+1];
    delete下就会崩掉。
      

  3.   

    TCHAR替换掉char
    _tcscpy替换掉strcpy
    _tcslen替换掉strlen如果用比较新版的VC,最好是用微软C Runtime Library中提供的安全函数,一般于_s结尾的。
    eg: strcpy_s...
      

  4.   

    如下代码是可以正确执行的,楼主可查下lpszPathName是怎么赋值的。        LPCTSTR lpszPathName="hello";
    char* file = new char[strlen(lpszPathName)];
    strcpy(file, lpszPathName);
    另外,LPCTSTR = const char* or const wchar_t* depending on _UNICODE
      

  5.   

    在多字节环境是正确的,unicode环境就不正确.
      

  6.   

    lpszPathName是wchar类型的,是在unicode的编译环境下的,
    strlen和strcmp是在多字节的环境下的
      

  7.   


    stcrpy(file, (LPSTR)(LPCTSTR)lpszPathName);
      

  8.   

    TCHAR* file = new TCHAR[_tcslen(lpszPathName) * sizeof(TCHAR)];
    _tcscpy(file, lpszPathName);因为strlen和strcpy只能作用于ASCII的字符集,而你当前的字符集是UNICODE.所以会报错
      

  9.   

    在VC6.0环境应该是可以执行的,VS2003以后可能就不行了
      

  10.   


    [Quote=引用 9 楼的回复:]
    TCHAR* file = new TCHAR[_tcslen(lpszPathName) * sizeof(TCHAR)];
    _tcscpy(file, lpszPathName);因为strlen和strcpy只能作用于ASCII的字符集,而你当前的字符集是UNICODE.所以会报错
    [Quote]
    The strcpy function copies strSource, including the terminating null character.