命令行参数未传入

标签 c null command-line-arguments

我正在设计一对使用基本流套接字在两个程序之间进行通信的 c 程序,类似于服务器-客户端交互。大部分程序貌似没问题,但是系统客户端一直报错,我搞不定。

客户端程序一旦编译,就会使用命令行参数执行,据我所知,这应该是服务器程序的名称。但是,每次我运行以下行

./client server

我收到一个错误,该错误仅在 argv[1] 为空时才会报告。这是来自 string_client.c 的代码:

if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
  perror("gethostbyname");
  printf("%s", argv[1]);
  exit(1);
}

server 只是来自 string_server.c 的可执行文件,它应该等待来自客户端的传入请求并接收来自客户端程序的输入(据我所知,它一直在工作)。我不确定 gethostbyname 方法,但由于提供了该代码,我还没有质疑它。

此外,每当我尝试打印出 argv[1] 时,它都会显示为“la”……不确定那里发生了什么。命令行是怎么回事?我只是使用了错误的参数吗?

最佳答案

给你:

#include <stdio.h>
#include <netdb.h>
extern int h_errno;

int main(int argc, char **argv)
{
    struct hostent *he;

    if(argc < 2)
    {
        printf("usage: %s hostname\n", argv[0]);
        return 255;
    }
    if ((he=gethostbyname(argv[1])) == NULL) {  // get the host info 
      perror("gethostbyname");
      printf("%s", argv[1]);
      return 1;
    }
    printf("%s resolved to %u.%u.%u.%u\n", argv[1], 
        (unsigned char)(he->h_addr_list[0][0]),
        (unsigned char)(he->h_addr_list[0][1]),
        (unsigned char)(he->h_addr_list[0][2]),
        (unsigned char)(he->h_addr_list[0][3]));

    return 0;
}

现在有效:

$ gcc -Wall -o gethost gethost.c
$ ./gethost 
usage: ./gethost hostname
$ ./gethost google.com
google.com resolved to 173.194.40.196
$ ./gethost localhost
localhost resolved to 127.0.0.1

关于命令行参数未传入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439005/

相关文章:

python - 在 Django 中测试空/空字符串

windows - 在批处理文件中使用不同驱动单元的问题

带有 Robocopy 和参数传递的 Powershell

erlang - 如何在脚本程序中获取程序名称?

c - 为指向结构数组的指针动态分配内存

c - 重新初始化函数中的结构数组

c - bison 和 flex 的 Typedef 问题

java - 我应该显式抛出 NullPointerException 还是让 Java 为我做这件事?

在 proc.c XV6 OS 中创建、写入、读取文件

android-studio - 如果没有显式 null 检查,编译器将无法识别不可为 null 的值