最近在学习K&R C中讲解的关于UNIX系统下运行命令的参数的讲解,其中可选参数 -x -n 可以被-xn取代。
这种处理方法的代码非常精练,这里记录下来以后用得上
代码如下 这是一个查找输入的行中是否含有匹配字符串的命令 并且有 -x -n两个可选参数。
vs2015和gcc下编译通过
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getline_s(char *line, int max);
/* print the line match the pattern with
* the first input parameter.
* support the optional parameter -x -n or -xn
* before the pattern */
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 optional %c\n", c);
argc = 0;
found = -1;
break;
}
}
}
if (argc != 1)
printf("Usage: find -x -n pattern\n");
else
{
while (getline_s(line, MAXLINE) > 0)
{
lineno++;
if ((strstr(line, *argv) != NULL) != except)
{
if (number)
printf("%ld:", lineno);
printf("%s", line);
found++;
}
}
}
return found;
}
int getline_s(char *s, int max)
{
int c;
char *p = s;
while ((c = getchar()) != EOF && c != '\n')
*s++ = c;
if (c == '\n')
*s++ = c;
*s = '\0';
return s - p;
}
编译好以后 输入
./a.out -x -n test 可选参数
./a.out test 忽略参数
./a.out -xn 组合参数