很抱歉,如果这是一个愚蠢的问题,但我一直在搜索,但无法在其他任何地方找到答案。它最有可能很简单,但这里有:
我被要求编写一个带有一个参数的C程序。如果我尝试给它一个以上,它应该以{{1}}的格式将用法消息打印到stderr,其中Usage: %s argument\n
是二进制文件的名称。
这是我不明白的最后一部分。
我知道如果失败,它应该看起来像这样:
%s
用法:$./hello
有人可以向我解释一下吗?
编辑:
让它像这样工作:
./hello argument
答案 0 :(得分:0)
首先,您可以尝试对其进行硬编码:)开个玩笑。
如果您使用的是Linux,则可以使用/ proc / pid / exe获得二进制名称。
例如:
auto ret = readlink("/proc/self/exe", buf, sizeof(buf));
if (ret == -1) //error
std::string fpath(buf, ret);
现在在fpath中,您具有程序的绝对路径。您可以使用dirname之类的函数来解析程序。
因此,首先您需要获取char *的绝对路径。这可以通过strcpy
完成char *fullpath = new char[fpath.length()+1];
strcpy(fullpath, fpath.c_str());
std::string dir = dirname(fullpath);
std::string program_name = fpath.substr(dir.length());
printf("Usage: %s argument\n", program_name);
就是这样。我将留给您决定缓冲区的大小;)
如果在Windows上,则可以使用函数GetModuleFileName https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197(v=vs.85).aspx
享受