C++ argv不适用于chdir

C++ argv不适用于chdir,c++,argv,chdir,C++,Argv,Chdir,我正试图通过以下方式使用chdir()将当前工作目录更改为可执行文件的路径: #include <iostream> #include <string> using namespace std; int main(int argc,char *argv[]) { if(chdir(argv[0]) == 0) printf("In %s\n", argv[0]); else printf("Failed to change directory\

我正试图通过以下方式使用
chdir()
将当前工作目录更改为可执行文件的路径:

#include <iostream>
#include <string>
using namespace std;

int main(int argc,char *argv[]) {

    if(chdir(argv[0]) == 0) printf("In %s\n", argv[0]);
        else printf("Failed to change directory\n");
}

为什么
chdir
不能与
argv[0]
一起工作?此问题的其他解决方案也将被接受。

您需要使用
splitpath
或类似方法从
argv[0]
中删除可执行文件的名称。您不能
chdir
到文件

[编辑]抱歉,我认为
拆分路径
是Windows的东西。。。只要这样做:

char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;
现在,
argv[0]
已被修剪以删除可执行文件名

请注意,命令行可能根本不包含任何目录


通过尝试以下内容,您在某种程度上打破了整个Linux(我想)的范式。。。您不必知道可执行文件存储在哪里。通常,可以通过以下方式之一指定输出:

  • 在配置文件中(例如,可能保存在
    /usr/local/etc
    或用户的主目录中,或在命令行中给出)

  • 使用命令行选项

  • 写入标准输出


  • 您需要使用
    splitpath
    或类似工具从
    argv[0]
    中删除可执行文件的名称。您不能
    chdir
    到文件

    [编辑]抱歉,我认为
    拆分路径
    是Windows的东西。。。只要这样做:

    char *dirsep = strrchr( argv[0], '/' );
    if( dirsep != NULL ) *dirsep = 0;
    
    现在,
    argv[0]
    已被修剪以删除可执行文件名

    请注意,命令行可能根本不包含任何目录


    通过尝试以下内容,您在某种程度上打破了整个Linux(我想)的范式。。。您不必知道可执行文件存储在哪里。通常,可以通过以下方式之一指定输出:

  • 在配置文件中(例如,可能保存在
    /usr/local/etc
    或用户的主目录中,或在命令行中给出)

  • 使用命令行选项

  • 写入标准输出


  • 因为argv[0]具有指向当前脚本(包括当前脚本)的路径。因此,您需要修剪最后一个路径分隔符(“/”、“:”或“\”(取决于您的平台)后面的所有内容,并将结果传递给chdir。

    ,因为argv[0]具有指向当前脚本(包括当前脚本)的路径。因此,您需要修剪最后一个路径分隔符(“/”、“:”或“\”,具体取决于您的平台)之后的所有内容,并将结果传递给chdir。

    您提供了哪些命令行参数?您正在将目录更改为可执行文件?为什么?在这种情况下,我要做的下一件事是先打印
    argv[0]
    。当然,调试它并检查
    argv
    中包含的值也很有效。我希望我的可执行文件能够从它自己的路径创建新文件,而不是shell的路径argv[1]也会失败@RetiredInjahelpful链接?您提供了什么命令行参数?您正在将目录更改为可执行文件?为什么?在这种情况下,我要做的下一件事是先打印
    argv[0]
    。当然,调试它并检查
    argv
    中包含的值也很有效。我希望我的可执行文件能够从它自己的路径创建新文件,而不是shell的路径argv[1]也会失败@RetiredInjahelpful链接?有没有内置的函数可以做到这一点?实际上,我认为,
    splitpath
    是Windows的东西。很抱歉看,你可以只做strrchr(argv[0],“/”)。如果不为null,则将返回指针处的字符设置为0。现在,
    argv[0]
    包含一个路径。是否有任何内置函数可以这样做?实际上,我认为,
    splitpath
    是Windows的东西。很抱歉看,你可以只做strrchr(argv[0],“/”)。如果不为null,则将返回指针处的字符设置为0。现在,
    argv[0]
    包含一个路径。