【问题标题】:Command Line Argument processing in cc中的命令行参数处理
【发布时间】:2026-02-05 01:40:01
【问题描述】:

在运行下面的代码时,它在显示argv[0]argv[1]argv[2] 行后卡住了。 此时进一步的代码流被阻止,任何人都可以帮助它停止执行还是进入无限循环。

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include "p8log.h"
#include <errno.h>
int main(int argc, char* argv[])
{
        char* PORT;
        char* IPADDR;

        printf("Arg Count=%d\n",argc);
        printf("Arguments are=%s,%s,%s\n",argv[0],argv[1],argv[2]);

        printf("HELLO");

        PORT=argv[1],
        printf("WORLD");
        IPADDR=argv[2];

        printf("START");
        printf("port num=%s",PORT);
        printf("IP ADDR=%s",IPADDR);
        printf("END");

        /* some algorithm of calculation */

        return 0;
}

执行

./file-exe 11111 127.0.0.1

输出

Arg Count=3

Arguments are=./file-exe,11111,127.0.0.1

【问题讨论】:

  • 标题是C++,标签是C,你用的是什么语言?
  • 显然没有流量控制;显示的代码不太可能导致无限循环。到目前为止的输出是什么?是否到达了将END 写入输出的部分?
  • \n 添加到所有printf 中。发布您输入的输入,然后发布您看到的输出。
  • 对我来说效果很好:$ ./a.exe 11111 127.0.0.1Arg Count=3Arguments are=C:\tmp\a.exe,11111,127.0.0.1HELLOWORLDSTARTport num=11111IP ADDR=127.0.0.1END
  • P.S.在 OP 编辑​​之后,水晶球说它卡在了 not 发布的 /* some algorithm of calculation */ 代码中。

标签: c command-line-arguments


【解决方案1】:

fflush(NULL);如果您想确保它打印到屏幕上,那么在任何输出之后都可以这样做。 printf 被缓冲,所以它可能会丢失。

./a.out 11111 127.0.0.1
Arg Count=3
Arguments are=./a.out,11111,127.0.0.1
HELLO
WORLD
START
port num=11111
IP ADDR=127.0.0.1
END

工作正常,你需要一些 \n 来分行,就像这样..

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
        char* PORT;
        char* IPADDR;

        printf("Arg Count=%d\n",argc);
        printf("Arguments are=%s,%s,%s\n",argv[0],argv[1],argv[2]);

        printf("HELLO\n");

        PORT=argv[1],
        printf("WORLD\n");
        IPADDR=argv[2];

        printf("START\n");
        printf("port num=%s\n",PORT);
        printf("IP ADDR=%s\n",IPADDR);
        printf("END\n");
        fflush(NULL);
        /* some algorithm of calculation */

        return 0;
}

【讨论】: