无法将 CHAR 转换为 LPWSTR
Cannot convert CHAR to LPWSTR
我在 Visual Studio 2015 年遇到编译错误,我正在尝试将 char
数据转换为 LPWSTR
。我可以吗?或者它只适用于字符串类型?
这是我的一段代码:
⋮
FILE *sortie;
char fichier[256];// <--- HERE s my char table
int main(int argc, char *argv[])
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
strcat(fichier, "\fichierlog.txt");
在发布我的问题之前,我在:
https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k%28C2664%29&rd=true
C++ cannot convert from enum to LPCTSTR
How to Convert char* to LPWSTR in VC++?
我没有找到我的箱子:(
您正在使用 unicode 进行编译,因此您必须使用 wchar_t
来声明字符串。而不是 strcat
使用 unicode 版本 wcscat
.
同时将字符串 "\fichierlog.txt" 更改为 L"\fichierlog.txt"
FILE *sortie;
//char fichier[256];// <--- HERE s my char table
wchar_t fichier[256];// <--- HERE s my char table
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
//strcat(fichier, "\fichierlog.txt");
wcscat(fichier, L"\fichierlog.txt");
而不是您当前的代码:
FILE *sortie;
char fichier[256];// <--- HERE s my char table
int main(int argc, char *argv[])
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
strcat(fichier, "\fichierlog.txt");
做例如
auto main() -> int
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
std::wstring fichier( MAX_PATH, L'[=11=]' );// <--- HERE s my char table
const DWORD len = GetCurrentDirectory( fichier.size(), &fichier[0] );
if( len == 0 || len >= fichier.size() ) { throw std::runtime_error( "GetCurrentDirectory failed." ); }
fichier.resize( len );
fichier += L"/fichierlog.txt";
std::ifstream sortie( fichier );
这应该可以解决三个问题:
您正在编译为 Unicode(可能是一个 Visual Studio 项目),但代码是针对 Windows ANSI API.
您正在使用 C++ 编译器,但代码是低级 C。
最大路径长度的缓冲区太小,连接可能会溢出缓冲区。
请注意,接受宽字符串的 ifstream
构造函数是 Microsoft 扩展。然而,通过将文件系统添加到 C++17 中的标准库,Windows C++ 编译器实际上需要它。
您的 Visual Studio 项目设置为使用 "widechars" 作为默认编码(又名 UNICODE)进行编译,因此所有 Windows API 都采用 wchar_t
数组而不是 char
处理字符串时的数组。
要么将您的项目设置为使用标准字符集,要么使用 GetCurrentDirectoryA
指定 GetCurrentDirectory
的 ASCII 版本。
GetCurrentDirectory
实际上不是一个函数,而是一个预处理器宏,它会将您路由到 GetCurrentDirectoryA
或 GetCurrentDirectoryW
,具体取决于您的编译器设置使用的编码。
我在 Visual Studio 2015 年遇到编译错误,我正在尝试将 char
数据转换为 LPWSTR
。我可以吗?或者它只适用于字符串类型?
这是我的一段代码:
⋮
FILE *sortie;
char fichier[256];// <--- HERE s my char table
int main(int argc, char *argv[])
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
strcat(fichier, "\fichierlog.txt");
在发布我的问题之前,我在:
https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k%28C2664%29&rd=true
C++ cannot convert from enum to LPCTSTR
How to Convert char* to LPWSTR in VC++?
我没有找到我的箱子:(
您正在使用 unicode 进行编译,因此您必须使用 wchar_t
来声明字符串。而不是 strcat
使用 unicode 版本 wcscat
.
同时将字符串 "\fichierlog.txt" 更改为 L"\fichierlog.txt"
FILE *sortie;
//char fichier[256];// <--- HERE s my char table
wchar_t fichier[256];// <--- HERE s my char table
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
//strcat(fichier, "\fichierlog.txt");
wcscat(fichier, L"\fichierlog.txt");
而不是您当前的代码:
FILE *sortie;
char fichier[256];// <--- HERE s my char table
int main(int argc, char *argv[])
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
strcat(fichier, "\fichierlog.txt");
做例如
auto main() -> int
{
//on masque
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
std::wstring fichier( MAX_PATH, L'[=11=]' );// <--- HERE s my char table
const DWORD len = GetCurrentDirectory( fichier.size(), &fichier[0] );
if( len == 0 || len >= fichier.size() ) { throw std::runtime_error( "GetCurrentDirectory failed." ); }
fichier.resize( len );
fichier += L"/fichierlog.txt";
std::ifstream sortie( fichier );
这应该可以解决三个问题:
您正在编译为 Unicode(可能是一个 Visual Studio 项目),但代码是针对 Windows ANSI API.
您正在使用 C++ 编译器,但代码是低级 C。
最大路径长度的缓冲区太小,连接可能会溢出缓冲区。
请注意,接受宽字符串的 ifstream
构造函数是 Microsoft 扩展。然而,通过将文件系统添加到 C++17 中的标准库,Windows C++ 编译器实际上需要它。
您的 Visual Studio 项目设置为使用 "widechars" 作为默认编码(又名 UNICODE)进行编译,因此所有 Windows API 都采用 wchar_t
数组而不是 char
处理字符串时的数组。
要么将您的项目设置为使用标准字符集,要么使用 GetCurrentDirectoryA
指定 GetCurrentDirectory
的 ASCII 版本。
GetCurrentDirectory
实际上不是一个函数,而是一个预处理器宏,它会将您路由到 GetCurrentDirectoryA
或 GetCurrentDirectoryW
,具体取决于您的编译器设置使用的编码。