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

标签 c++ charsequence

刚刚开始学习 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] = '\0';

    cout << result << endl; // This give correct result "aya";

    return result;
}

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

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 动态分配缓冲区,使缓冲区在函数范围之外持久存在。当然记得稍后释放它。

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

关于C++ char序列函数总是返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003894/

相关文章:

c++ - 为什么 std::insert 需要 CopyConstructibility?

c++ - 在GDB中操作以$开头的C++成员变量

c++ - 通过 sscan f 写入十六进制模式

c++ - 编译器如何知道是使用成员运算符重载还是全局运算符重载?

java - 如何使用 CharSet 对 CharSequence 进行编码(不转换为字符串)

java - 在android中将float转换为CharSequence?

java - 什么时候在 String.subString 上使用 String.subSequence 方法?

java - java中有没有类似于StringBuilder的类,唯一的区别就是它的长度是固定的?

c++ - 如何在 C++ 中创建带替换的排列?

java - 写入 CSV 文件。 myPackage.MyClass 无法转换为 java.lang.CharSequence