我寫了一個簡單的程序,返回作爲參數傳遞的IP地址的主機名。該程序使用兩個函數:getaddrinfo()和getnameinfo()。 我正在使用Linux Mint,Netbeans IDE和G ++編譯器。輸出是正常的,沒有錯誤,但是當我宣佈一個Cout在聲明一個std :: string變量後不給出輸出
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;
}
我想'hostname'需要分配內存。 – chris 2013-04-05 21:24:38
C++不能這樣工作。它與弦無關。你不能瘋狂地聲明'char *'並希望它指向某個合理的地方。看看[這個例子](http://en.wikipedia.org/wiki/Getaddrinfo)的一些靈感。 – 2013-04-05 21:25:08