0

刚开始学习 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”变量正确地回显了结果。请您向我解释一下我的函数内部发生了什么,我错过了什么吗?

4

1 回答 1

4

您正在返回指向不需要超出函数的本地数组的指针。

您需要通过使用动态分配缓冲区来使缓冲区持续超出函数的范围mallocfree当然,以后记得。

哦,刚刚注意到它的 C++。
所以放弃mallocandfree简单地使用std::stringand not的想法char *

于 2012-12-22T15:09:00.310 回答