刚刚开始学习 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++。
因此,放弃 malloc
和 free
的想法,只需使用 std::string
而不是 char *
。
关于C++ char序列函数总是返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003894/