递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1335|回复: 2
打印 上一主题 下一主题

[其它] [求助]C++代码取运行目录

[复制链接]

9

主题

30

帖子

348

积分

中级会员

Rank: 3Rank: 3

积分
348
跳转到指定楼层
楼主
发表于 2023-4-7 10:14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Vanyogin 于 2023-4-7 10:15 编辑

const wchar_t* 程序_取目录W() {
    wchar_t exePath[MAX_PATH];
    GetModuleFileNameExW(GetCurrentProcess(), 0, exePath, MAX_PATH);
    const wchar_t* path = exePath;

    std::wstring wstr = path;
    size_t pos = wstr.find_last_of(L"\\")+1;
    const wchar_t* str2 = L"";
    if (pos != std::wstring::npos) {
        wstr = wstr.substr(0, pos);
        str2 = wstr.c_str();
    }
    return str2;
}


请问这代码为什么取不了正确结果?在vs运行很多次,只有偶尔能得到正确结果.
回复

使用道具 举报

26

主题

1526

帖子

5719

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5719
来自 2#
发表于 2023-4-7 10:35:42 | 只看该作者
不要返回局部变量的指针啊,局部变量会释放,那文本指针就无效了,应该直接返回 std::wstring

std::wstring 程序_取目录W()
{
    std::wstring exePath;
    exePath.resize(MAX_PATH);
    ::GetModuleFileNameExW(::GetCurrentProcess(), 0, exePath.data(), MAX_PATH);
    size_t pos = exePath.find_last_of('\\');
    if (pos != std::wstring::npos)
    {
        exePath.erase(pos + 1);
        return exePath;
    }
    return std::wstring{};
}

评分

参与人数 1金钱 +1 收起 理由
Vanyogin + 1 谢谢,c++太难了.还是火山好.

查看全部评分

回复

使用道具 举报

439

主题

1万

帖子

3万

积分

超级版主

Rank: 8Rank: 8

积分
36947
板凳
发表于 2023-4-7 12:17:27 | 只看该作者
看见这一堆代码,只能说,火山大法好。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-6-3 22:15 , Processed in 0.089028 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表