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

时间:2012-12-22 15:07:23

标签: 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”变量正确地回显了结果。你能解释一下我的功能中发生了什么,我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

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

您需要使用malloc动态分配缓冲区,使缓冲区超出函数范围。当然记得以后free

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