vc2005里控制台应用程序中,cmd里传入参数argv的问题
vc2005里控制台应用程序中,cmd里传入参数argv的问题:
int main(int argc, char* argv[])
{
// 取主机名
char temp_hostname[60];
int temp_hostname_length = 60;
gethostname(temp_hostname, temp_hostname_length); // 问题1:temp_hostname取不到值,为空
// 根据cmd里传入参数,取值
struct hostent *host;
host = gethostbyname(argv[1]); // 问题2:取不到值,host一直为NULL;
return 0;
}
在cmd里输入:
xxx.exe mypc 2000
其中:mypc为电脑名称
[解决办法]
在调用和Socket有关的函数前,需要load socket库,即调用WSAStartup,将代码按照如下方式修改后,就能得到host name了。
#include <stdio.h>#include <stdlib.h>#include <winsock2.h>#include <MSWSock.h>#pragma comment(lib,"ws2_32.lib")int LoadSocketLib(){ WSADATA wsaData; int nResult; nResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (NO_ERROR != nResult) { printf("初始化WinSock 2.2失败!\n"); return 0; } return 1;}int main(int argc, char* argv[]){ // 取主机名 char temp_hostname[60]; //int temp_hostname_length = 60; int bRet= LoadSocketLib(); if (!bRet) return 0; gethostname(temp_hostname, sizeof(temp_hostname)); printf("host name is %s\n",temp_hostname); return 0;}
[解决办法]
楼上正解
[解决办法]
你都不检查API返回值的啊, 那你就要是高手
[解决办法]
关于问题2,我这里可以工作。
argv[1]可以是自己的主机名,也可以是局域网内别的主机名,我这里都可以工作。
请debug一下,看看 argv[1]是不是一个真实的主机名。