C ++从数组末尾删除特定数量的项目

时间:2018-06-25 09:36:58

标签: c++ arrays windows path

我正在尝试编写一个程序来获取其正在运行的文件夹的路径(在Windows上)。

这是到目前为止我得到的:

char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);

这可以正常工作,但是可以提供完整路径,包括exe名称。我只想要exe所在文件夹的路径,不包括exe名称。 我试图获取argv [0]的长度,并从路径的末尾删除它,但是我还不太清楚如何使它工作。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

  

我正在尝试编写一个程序来获取其正在运行的文件夹的路径(在Windows上)。

可能有两种解释:可执行文件存储在文件夹中(这是您的代码所反映的)或当前工作目录(不一定是相同的,但我理解的是...) ,还有另一个Windows API函数。

char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);

编辑:如他评论中的PaulMcKenzie所示:已经不推荐使用PathRemoveFileSpec函数,尽管–应该使用PathCchRemoveFileSpec

PathCchRemoveFileSpec(path, sizeof(path));

保留先前的答案(仅供更好地理解):

好的,当GetModuleFileName检索完全限定的路径时,您将得到类似的内容:

c:\some\path\to\your\file.exe

您现在要做的就是找到最后一个反斜杠的位置:

char* end = strrchr(path, '\\');
// actually cannot be nullptr, as path is fully qualified, but still for security:
if(end)
{
    // cut off the rest...
    *end = 0; // new end, null character denotes it...
}
else
{
    // something has badly gone wrong...
}