通过指针传递char并获得不同的结果

时间:2015-03-17 20:23:18

标签: c++ gethostbyname

我正在使用gethostname来获取我正在处理的计算机的名称。在我的主要功能中,我称它为UBU24-PS-23正确的计算机名称。然后我调用一个函数,并使用gethostname,我得到一个不同的字符串。在我的main函数中,gethostname返回0以便它可以工作,在我的函数中它返回-1所以它失败了。有什么想法吗?这是我的代码

 #include <iostream>
 #include <sys/unistd.h>
 using namespace std;


int funToGetHostName(char * name, size_t len);
int main() {

char hostname[128];
char hostnameFunction[128];

int g = gethostname(hostname, sizeof hostname);
int r = funToGetHostName(hostnameFunction, sizeof hostnameFunction);
cout<<"My hostname: %s\n"<< hostname<< " "<< g<<endl;
cout<<"My hostnameFunction: %s\n"<< hostnameFunction<< " "<< r;

return 0;
}

int funToGetHostName(char * name, size_t len){
    return gethostname(name, sizeof len);
}

2 个答案:

答案 0 :(得分:3)

int funToGetHostName(char * name, size_t len){
    return gethostname(name, sizeof len);
}

sizeof len可能会比您预期的要小得多。

相反,你想要:

    return gethostname(name, len);

因为你在调用函数时已经传入了缓冲区长度。

答案 1 :(得分:2)

出现以下错误:

int funToGetHostName(char * name, size_t len){
    return gethostname(name, sizeof len);
                             //^^^^^ This is not 128.
}

你需要

int funToGetHostName(char * name, size_t len){
    return gethostname(name, len);
}