首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

vc2005里控制台应用程序中,cmd里传入参数argv的有关问题

2012-10-17 
vc2005里控制台应用程序中,cmd里传入参数argv的问题vc2005里控制台应用程序中,cmd里传入参数argv的问题:in

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了。

C/C++ code
#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]是不是一个真实的主机名。

热点排行