首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpandEnvironmentStringsA()字符串子脚本超出范围

ExpandEnvironmentStringsA()字符串子脚本超出范围
EN

Stack Overflow用户
提问于 2021-06-02 03:22:17
回答 1查看 11关注 0票数 0

我有一个函数可以检查是否安装了IIS,并获取安装路径。

代码语言:javascript
复制
    int IsIISInstalled(string &pathname)
{
    DWORD returnvalue;
    long keyres = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\InetStp\\", 0, KEY_READ, &miva);
    if (keyres == ERROR_SUCCESS)
    {
        char szBuffer[512];
        DWORD dwBufferSize = sizeof(szBuffer);
        ULONG nError;
        nError = RegQueryValueExA(miva, "InstallPath", NULL, NULL, (LPBYTE)szBuffer, &dwBufferSize);
        if (nError == ERROR_SUCCESS)
        {
            char retBuffer[512];
            DWORD nsize = sizeof(retBuffer);
            returnvalue = ExpandEnvironmentStringsA(szBuffer, retBuffer, nsize);
            pathname = retBuffer;
            
        }

    }
    if (!pathname.empty())
        return 1;
    else
        return 0;
}

当我附加到我的可执行文件并对其进行调试时,retBuffer中的ExpandEnvironmentStringsA会返回一个值,显示安装路径。返回值显示28,就像放入缓冲区的TCHARS一样。一旦我进入下一行,将字符串路径名设置为retBuffer,它就会失败,给出一个超出范围的字符串下标。我明白这个错误意味着什么,我已经做过很多次了。让我感到奇怪的是,如果我在函数中指定了一个新的字符串var:

代码语言:javascript
复制
string fakeresult;

并将fakeresult设置为retBuffer:

代码语言:javascript
复制
fakeresult = retBuffer;

就像我在上面的代码中一样,它通过得很好,没有错误。我正在使用下面的代码调用函数。

代码语言:javascript
复制
string iis_path, miva_path;
        int disable;
        char *full_path;
        //getMivaLocation(miva_path);
        bool good2go;
        int iisinstalled, empressaReturn, miaReturn;
        iisinstalled = IsIISInstalled(iis_path);

这是否与我通过引用将路径名传递给函数有关?如果是这样,为什么呢?我如何解决这个问题才能返回我的数据?我不是一个受过良好教育的c++程序员,我在这方面学到了很多,也从你们那里学到了很多。希望有人对此有一个想法,因为我不希望花费更多的时间研究无用。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-06-02 03:45:21

在深入研究之后,我发现路径名被设置得恰如其分。它在下一次调用另一个函数时会立即崩溃,因此我的调试是不正确的。现在我已经进一步扩展了作用域,希望我能解决这个问题。我自己也注意到,当我设置fakestring而不是pathname时,它不会崩溃的原因是因为我在崩溃的函数调用中传递了pathname。没有价值的情况下,它不会设置超出其范围的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67794871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档