2015-03-17 3 views
0

Я использую gethostname, чтобы получить имя компьютера, над которым я работаю. В своей основной функции я называю это и получаю UBU24-PS-23 правильное имя моего компьютера. Затем я вызываю функцию и использует имя gethostname, и я получаю другую строку. В моей основной функции gethostname возвращает 0, поэтому он работает, в моей функции он возвращает -1, поэтому он терпит неудачу. Любые идеи почему? Вот мой кодпрохождение char по указателю и получение другого результата

#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); 
} 
+0

SizeOf (LEN) такая же, как SizeOf (size_t). И size_t (возможно) имеет ширину 32 или 64 бит. – Outback

ответ

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

sizeof len, вероятно, будет намного меньше, чем вы ожидаете.

Вместо этого, вы хотите:

return gethostname(name, len); 

, так как вы уже прошли в длину буфера при вызове вашей функции.

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); 
}