2

我正在尝试向 send() 添加一个插入变量。

这是代码:

string num;

// + num + is the reason for the error. Any work around or suggestions?
char *msg = "GET /index.php?num=" + num + " HTTP/1.1\nhost: domain.com\n\n";

int len;
ssize_t bytes_sent;
len = strlen(msg);
bytes_sent = send(socketfd, msg, len, 0);

我收到错误:

test.cpp: In function âint main()â:
test.cpp:64: error: cannot convert âstd::basic_string<char, std::char_traits<char>, 
std::allocator<char> >â to âchar*â in initialization

- 编辑 -

我试图用 msg.c_str 修复它

cout << "send()ing message..."  << endl;
string msg = "GET /index.php?num=" + num + " HTTP/1.1\nhost: domain.com\n\n";   
int len;
ssize_t bytes_sent;
len = msg.lenght(); //updated to this and still gives me an error.
bytes_sent = send(socketfd, msg.c_str, len, 0);

现在它给了我错误:

error: argument of type âconst char* (std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >::)()constâ does not match âconst char*â
4

4 回答 4

3

"stuff" + num + "more stuff"不符合您的预期。即使您要转换str为 char 指针,即使 C++ 允许您将 char 指针添加在一起,它最终也会做完全错误的事情。

(作为参考,C++不允许您将指针相加,因为结果没有任何意义。指针仍然只是数字,添加两个 char 指针基本上等于0x59452448 + 0x10222250或类似的东西,这将返回一个指针到某个可能还不存在的位置...)

试试这个:

string msg = string("GET /index.php?num=") + num + " HTTP/1.1\nhost: domain.com\n\n";
ssize_t bytes_sent = send(socketfd, msg.c_str(), msg.size(), 0);
于 2012-11-25T21:50:44.673 回答
1

您正在使用num第三行未初始化的位置。也许你想要:

std::string num;
std::string msg = "GET /index.php?num=" + num + " HTTP/1.1\nhost: domain.com\n\n";
于 2012-11-25T21:43:53.147 回答
1

std::string不会隐式转换为char*. 你需要使用c_str.

于 2012-11-25T21:45:37.227 回答
1

理想情况下,您应该在应用程序中完全使用字符串(而不是 char*),直到 API 函数需要 char*,然后调用c_str字符串为您的函数获取 const char*正在打电话。

于 2012-11-25T21:48:38.187 回答