我在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");
在发布我的问题之前,我在:
答案 0 :(得分:3)
而不是您当前的代码:
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'\0' );// <--- 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 ++编译器几乎是必需的。
答案 1 :(得分:2)
您正在使用unicode进行编译,因此您必须使用wchar_t
来声明字符串。而不是strcat
使用的是wcscat
的unicode版本。
同时更改字符串&#34; \ fichierlog.txt&#34;成为 L &#34; \ fichierlog.txt&#34;
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");
答案 2 :(得分:1)
您的Visual Studio项目设置为使用&#34; widechars&#34;进行编译。作为默认编码(也称为UNICODE),因此在处理字符串时,所有Windows API都会使用char
数组而不是GetCurrentDirectory
数组。
将项目设置为使用标准字符集,或者使用GetCurrentDirectoryA
来指定GetCurrentDirectory
的ASCII版本。
GetCurrentDirectoryA
实际上不是一个函数,而是一个预处理器宏,它会将您引导到GetCurrentDirectoryW
或NSURL *URL = [NSURL URLWithString:@"http://maps.googleapis.com/maps/api/directions/xml?origin=Toronto&destination=Montreal&sensor=false"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFXMLDictionaryResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *d0 = [NSDictionary dictionaryWithXMLParser:(NSXMLParser*)responseObject];
NSLog(@"d0:%@", d0);
} failure:nil];
[operation start];
,具体取决于您的编译器设置使用的内容。