Невозможно использовать char * с URLDownloadToFile

#include "stdafx.h"#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <iostream>
#include <UrlMon.h>
#include <cstring>
#pragma comment(lib, "UrlMon.lib")
using namespace std;

int main()
{
char* appdata = getenv("APPDATA"); //Gets %Appdata% path
char* truepath = strcat(appdata, "\\USR\\file.dat"); // file location

cout << truepath ;
HRESULT hr = URLDownloadToFile(NULL, _T("http://localhost:8080/upload.php?name=Huh?" + truepath), _T("d"), 0, NULL);
cin.get();
return 0;
}

Это мой код выше, и я получаю сообщение об ошибке на этой линии:

HRESULT hr = URLDownloadToFile(NULL, _T("http://localhost:8080/upload.php?name=Huh?" + truepath), _T("d"), 0, NULL);

Ошибка компиляции, которую он мне дает, говорит о том, что «+ truepath» там невозможно использовать.

Я пробовал .c_str () и несколько других способов, но не могу заставить его работать. Любая помощь приветствуется.

1

Решение

// ANSI Build
std::string appdata( getenv("APPDATA") );
appdata += "\\USR\\file.dat";
std::string url( "http://localhost:8080/upload.php?name=Huh?" );
url += appdata;
URLDownloadToFile( NULL, url.c_str(), [...]

// UNICODE Build
std::wstring appdata( _wgetenv( L"APPDATA" ) );
appdata += L"\\USR\\file.dat";
std::wstring url( L"http://localhost:8080/upload.php?name=Huh?" );
url += appdata;
URLDownloadToFile( NULL, url.c_str(), [...]
4

Другие решения

Вы не можете добавить два указателя.

truepath это указатель на символ

И когда ты говоришь "http://localhost:8080/upload.php?name=Huh?" он возвращает указатель на char, Итак, вы пытаетесь добавить два указателя, и вот что стандарт говорит об аддитивном операторе …

5.7
For addition, either both operands shall have arithmetic or unscoped enumeration
type, or one operand shall be a pointer to a completely-defined object
type and the other shall have integral or unscoped enumeration type.

Кроме того, вы должны выделить память для truepath переменная, иначе он потерпит крах.

4

По вопросам рекламы [email protected]