写一个getopt传入字符串以及其它参数的程序
时间: 2023-12-10 15:02:46 浏览: 46
好的,以下是一个简单的示例程序,它使用getopt函数从命令行获取选项和参数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int opt;
char *str = NULL;
int num = 0;
while ((opt = getopt(argc, argv, "s:n:")) != -1) {
switch (opt) {
case 's':
str = optarg;
break;
case 'n':
num = atoi(optarg);
break;
case '?':
fprintf(stderr, "Usage: %s [-s string] [-n number]\n", argv[0]);
exit(EXIT_FAILURE);
}
}
printf("String: %s\n", str);
printf("Number: %d\n", num);
return 0;
}
```
上述程序使用了getopt函数来处理命令行选项和参数。在这个程序中,我们定义了两个选项:“-s”和“-n”,分别用于传递一个字符串和一个整数。使用getopt函数解析命令行选项和参数的过程如下:
1. 调用getopt函数来获取下一个选项字符。如果所有选项都已处理完毕,getopt函数返回-1。
2. 如果当前选项字符为一个有效的选项(即在选项字符串中定义过),则根据选项的类型来处理它的参数。在本示例程序中,“-s”和“-n”选项都需要一个参数。选项的参数可以通过全局变量optarg来获取。如果选项的参数不合法(比如不是一个数字),则可以用相应的错误处理代码来处理。
3. 如果当前选项字符不是一个有效的选项(即不在选项字符串中定义过),则返回“?”并显示一个错误消息。
4. 重复执行步骤1-3,直到所有选项都已处理完毕。
在本示例程序中,我们使用了两个全局变量来存储选项和参数的值:str和num。如果选项没有被指定,则它们的值将保持为默认值(即NULL和0)。在程序的最后,我们输出这两个变量的值,以验证程序是否正确地处理了命令行选项和参数。