扫描参数并用c++程序确定它们是什么
Scan arguments and determine what they are with a c++ program
这是一项家庭作业。
我们必须创建一个"UNIX/Linux中的通用应用程序编程模型,称为过滤器"。
我一直在阅读作为参数传递的输入(这似乎是我遇到的所有问题)。
例如,cmd打开,并输入以下行:
program -isomebinaryfile.bin
我需要确定连字符(-
)后面的第一个字母是什么,依此类推。
scanf
是我要使用的吗?我的main
设置为能够接受参数:
int main (int argc, char *argv[])
{
FILE *inf = NULL;
char *arg = argv[0];
}
有人能帮我一点忙吗?
除非您的任务只是处理参数的处理,否则您可能需要查找getopt
——它是参数的标准库解析器。
至于你的问题,有很多选择,你可以使用sscanf
作为其中的一部分,但你不必这样做。
要解析您提到的一个参数,您需要执行以下操作:检查参数是否以-i开头,从参数中获取数据。
检查参数是否以-i开头的最简单方法是:
if (argv[1][0] == '-' && argv[1][1] == 'i')
或者,如果你有很多参数选项,都以"-"开头,你可能想要这样的选项:
char * i = NULL;
char * o = NULL;
char * s = NULL;
for (int i = 1; i < argc; ++i) {
if (argv[i][0] == '-') {
switch(argv[i][1]) {
case 'i':
i = argv[i][2];
break;
case 's':
s = argv[i][2];
break;
case 'o':
o = argv[i][2];
break;
default:
cerr << "Unknown option: " << argv[i][1];
}
} else {
cerr << "Error: all options must begin with '-'";
}
注意,我使用的是argv[1],而不是0。argv[0]始终是可执行文件的名称。
提取其余参数的最快方法是简单的指针算术:
char * filename = argv[1] + 2; // (Or you could equivalently say = &argv[1][2]
这是最有效的——它重用argv中已经存在的字符串。如果你打算改变字符串,你最好使用strcpy:
char * filename = (char *)malloc(strlen(argv[1]) - 2);
strcpy(filename, argv1 + 2);
// and eventually you'd have to free(filename)...
试着玩所有的字符串函数。你会发现它们对你以后的所有程序都很重要。
您需要使用getopt。手册页面上有一个示例。
argv
是一个字符串数组。你可以像一样在它们上循环
for (int i=1; i<argc; i++) { // skip argv[0] as that's this program's name
const char* arg = argv[i];
}
一旦有了特定参数的字符串,就可以使用<string.h>
中的字符串操作函数
if (arg[0] == '-' && strlen(arg) > 0) {
arg++; // advance past the leading '-'
if (strcmp(arg, "command_one") == 0) {
// handle command_one
}
else if (strcmp(arg, "command_one") == 0) {
....
else {
printf("Error: unexpected command %sn", arg);
}
从argv
("参数向量")获取参数。在您的示例中,argc
和argv
如下所示:
argc == 2
argv[0] == "cmd"
argv[1] == "-isomebinaryfile.bin"
在argv[1]
中查找连字符后的第一个字母是一个简单的循环。
相关文章:
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 没有信号处理程序的POSIX定时器的目的是什么?
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 是什么原因导致我的SDL2程序中出现杂散像素
- 我的C++程序的工作目录是什么
- 是什么将程序集转换为实际可执行的材料
- 以下程序在 c++ 中的输出是什么?
- cpp中rand()方法的bankend程序是什么?
- 在Visual Studio中编写独立程序的最佳方法是什么?
- 应用程序仅在安装了 Visual Studio 的 PC 上启动.这种行为的原因可能是什么
- 在所有程序中,在Visual Studio中添加OpENCV的一般方法是什么?
- 对于我扩展此程序来计算最高10x10矩阵的倒数的最简单方法是什么
- 是什么导致程序在我继续执行另一个功能之前停止
- C++程序的输出与预期不同的原因是什么?
- 开发C++应用程序,目标服务器有不同的std lib版本,最佳实践是什么
- 以下程序背后的逻辑是什么
- 这个boost.python程序中的错误是什么?
- 程序崩溃的原因可能是什么,恕不另行通知