gpt4 book ai didi

c++ - Cout 在声明 std::string 变量后没有输出

转载 作者:行者123 更新时间:2023-11-30 02:56:12 24 4
gpt4 key购买 nike

我编写了一个简单的程序,返回作为参数传递的 IP 地址的主机名。该程序使用两个函数:getaddrinfo() 和 getnameinfo()。我正在使用 Linux Mint、Netbeans IDE 和 G++ 编译器。输出没问题,没有错误,但是当我声明一个

std::string str;

然后 cout 没有输出,屏幕上没有打印任何内容。但是,当我注释掉 std::string 声明或将其删除时,语句

std::cout << "hostname: " << hostname << std::endl;

成功打印返回的主机名。

这样奇怪的错误可能是什么原因造成的?

#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <iostream>
#include <string>

int main()
{
struct addrinfo* result;
struct addrinfo* res;
int error;
const char* host;
// When I comment out this line, cout prints the hostnames succesfully.
std::string str;

error = getaddrinfo("127.0.0.1", NULL, NULL, &result);
res = result;

while (res != NULL)
{
char* hostname;
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, 1025, NULL, 0, 0);
std::cout << "hostname: " << hostname << std::endl;
res = res->ai_next;
}

freeaddrinfo(result);
// When I declare an std::string str variable, this cout doesn't either print anything
std::cout << "TEST" << std::endl;

return 0;
}

最佳答案

   The arguments host and serv are pointers to caller-
allocated buffers (of size hostlen and servlen respectively) into which
getnameinfo() places null-terminated strings containing the host and
service names respectively.

http://man7.org/linux/man-pages/man3/getnameinfo.3.html

您的指针必须实际分配。注释掉该行会改变任何东西的事实可能是巧合或优化的奇怪副作用。

关于c++ - Cout 在声明 std::string 变量后没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com