>我在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++无法从枚举转换为 LPCTSTR
如何在VC++中将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");
例如
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' ' );// <--- 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扩展。但是,Windows C++ 编译器实际上需要它,因为 C++17 中的文件系统添加到标准库中。
你正在使用 unicode 进行编译,所以你必须使用 wchar_t
来声明字符串。而不是strcat
使用wcscat
的 unicode 版本。
同时将字符串"\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");
Visual Studio 项目设置为使用"widechars"作为默认编码(也称为 UNICODE)进行编译,因此所有 Windows API 在处理字符串时都采用wchar_t
数组而不是char
数组。
将项目设置为使用标准字符集,或者改用GetCurrentDirectoryA
指定 GetCurrentDirectory
的 ASCII 版本。
GetCurrentDirectory
实际上不是一个函数,而是一个预处理器宏,它将根据编译器设置为使用的GetCurrentDirectoryA
或GetCurrentDirectoryW
路由到。