How to call correctly getopt function

 ̄綄美尐妖づ 提交于 2019-12-04 13:22:17

You are missing two things here:

  1. Argument list is not a string. It is a list of strings. Don't get confused by shell or other programs that ask for a list of arguments as a single string. At the end of day, those programs would split a string into arrays of arguments and run an executable (see execv, for example).
  2. There is always an implicit first argument in argument list that is a program name.

Here is your code, fixed:

#include <string>
#include <iostream>
#include <unistd.h>

int main()
{
    const char *argv[] = { "ProgramNameHere",
                           "-f", "input.gmn", "-output.jpg" };
    int argc = sizeof(argv) / sizeof(argv[0]);
    std::cout << "argc: " << argc << std::endl;
    for (int i = 0; i < argc; ++i)
        std::cout << "argv: "<< argv[i] << std::endl;
    int c;

    while ((c = getopt(argc, (char **)argv, "f:s:o:pw:h:z:t:d:a:b:?")) != -1) {
        std::cout << "Option: " << (char)c;
        if (optarg)
            std::cout << ", argument: " << optarg;
        std::cout << '\n';
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!