c++字符序列函数总是返回空字符串

C++ char sequence function always return empty string

本文关键字:返回 字符串 函数 字符 c++      更新时间:2023-10-16

刚刚开始学习c++并尝试用以下代码创建一个简单的函数:

char* substring(int start, int end, const char* target)
{
    size_t length = strlen(target);
    char result[(length + 1)];
    int iterator = 0;
    for(int i = start; i < length; i++)
    {
        if(i <= end)
        {
            result[iterator] = target[i];
            iterator++;
        }
    }
    result[iterator] = '';
    cout << result << endl; // This give correct result "aya";
    return result;
}

当我在主方法上使用这些函数时:

int main(int argc, char** argv) {
    char some_text[] = "Saya Makan";
    char* sub = substring(1, 3, some_text); // No string returned
    cout << "Substring Result is: " << sub;
    return 0;
}

输出如下:

aya
Substring Result is: 
RUN SUCCESSFUL (total time: 44ms)

如结果所示,我的函数除了空字符串之外没有返回任何东西,尽管在返回之前有一行代码,"result"变量正确地返回了结果。你能给我解释一下我的函数里面发生了什么吗,我遗漏了什么吗?

您正在返回指向局部数组的指针,该指针不需要在函数之外存在。

您需要使用malloc动态分配缓冲区,从而使缓冲区在函数范围之外保持持久。当然,记得以后再加free

哦,我注意到它是c++。
因此,放弃mallocfree的想法,只需使用std::string而不是char *