c语言main函数的命令行参数

c语言环境中,可以在程序开始执行时将命令行参数传递给程序。main函数有两个参数。

  • argc:表示运行程序时命令行中参数的数目。
  • argv:参数向量,是一个指向字符串数组的指针,其中每个字符串对应一个参数。
  • arg[0]的值是启动程序的程序名(c语言的规定,由此可知,argc的值至少是1),当argc的值为1时,说明程序名后面没有命令行参数。
  • ANSI标准要求argv[argc]的值必须为一空指针。
echo hello world

上面例子中,argc的值为3,argv[0],argv[1],argv[2]的值分别是”echo”、”hello”、”world”。

#include <stdio.h>

int main(int argc,char*argv[]){

    int i;
    for(i = 1; i < argc; i++){
        printf("%s%s",argv[i],(i < argc - i) ? " " : "");
    }
    printf("\n");
    return 0;
}

另一种形式:

#include <stdio.h>

int main(int argc,char*argv[]){

    while (--argc > 0){
        printf("%s%s",*++argv, (argc > 1) ? " " : "");
    }
    printf("\n");

    return 0;
}
打印与第一个参数
#include <stdio.h>
#include <string.h>

#define MAXLINE 1000
int getlines(char *line, int max);

int main(int argc, char *argv[]){

    char line[MAXLINE];
    int found = 0;

    if(argc != 2)
        printf("Usage: find pattern\n");
    else
        while (getlines(line,MAXLINE) > 0)
            if (strstr(line,argv[1]) != NULL){//strstr(s,t)返回一个指针,该指针指向字符串t在字符串s中第一次出现的位置。
                printf("%s",line);
                found++;
            }
    return found;
}

int getlines(char s[],int lim){
    int c,i;

    for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)

        s[i] = c;
    if(c=='\n'){
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

上面程序(输入的字符串如果包含ss就打印出来)运行结果如下:
这里写图片描述

UNIX系统中的c语言程序有一个公共的约定:以负号开头的参数表示一个可选标志或参数。

上述程序改造:

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000
int getlines(char *line, int max);

int main(int argc, char *argv[]){

    char line[MAXLINE];
    long lineno = 0;
    int c,except = 0, number = 0,found = 0;

    while (--argc > 0 && (*++argv)[0] == '-'){
        while (c = *++argv[0])
            switch (c){
                case 'x':
                    except = 1;
                    break;
                case 'n':
                    number = 1;
                    break;
                default:
                    printf("find: illegal option %c\n",c);
                    argc = 0;
                    found = -1;
                    break;
            }

            while (getlines(line,MAXLINE) > 0){
                lineno++;
                if((strstr(line,argv[1]) != NULL) != except){
                    if(number)
                        printf("%ld:",lineno);
                    printf("%s",line);
                    found++;
                }
            }
    }

    return found;
}

int getlines(char s[],int lim){
    int c,i;

    for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)

        s[i] = c;
    if(c=='\n'){
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}


上面程序是在查找除了指定字符串以外的字符串,并且加上行号打印。
下面是标注行号打印不包含ss的字符串。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值