gpt4 book ai didi

c - 打印二进制文件的名称

转载 作者:行者123 更新时间:2023-11-30 16:28:24 25 4
gpt4 key购买 nike

如果这是一个愚蠢的问题,我很抱歉,但我一直在寻找但无法在其他地方找到答案。它很可能非常简单,但这里是:

我被要求编写一个带有一个参数的 C 程序。如果我尝试给它多个,它应该向 stderr 打印一条使用消息,格式为 Usage: %s argument\n,其中 %s 是名称二进制文件的。

这是我不明白的最后一部分。

我知道如果失败的话应该是这样的:

$./你好用法:./hello 参数

有人可以向我解释一下吗?

编辑:

让它像这样工作:

#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>


int args_test(int args, char argument[]){

if(args < 1){
fprintf(stderr, "Usage: %s argument\n", argument);
exit(EXIT_SUCCESS);
}
if(args < 2){
fprintf(stderr, "Usage: %s argument\n", argument);
exit(EXIT_SUCCESS);
}

if(args > 2){
fprintf(stderr, "Usage: %s argument\n", argument);
exit(EXIT_SUCCESS);
}

return 0;
}

int args_usage(char argument[]){
printf("Hello, %s!\n", argument);
exit(EXIT_SUCCESS);
}

int main(int args, char* argv[]){
if(args < 2 || args > 2){
args_test(args, argv[0]);
}
args_test(args, argv[1]);
args_usage(argv[1]);
exit(EXIT_SUCCESS);
}

最佳答案

首先你可以尝试对其进行硬编码:)开玩笑。

如果您使用的是 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

享受

关于c - 打印二进制文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52385096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com