How to return a char array created in function?(如何返回在函数中创建的 char 数组?)
问题描述
我编程很糟糕已经有一段时间了,我才真正意识到.我之前创建了许多将字符串作为 char 数组(或至少指向它们的指针)返回的函数.
I've been programming badly for quite a while and I only really just realised. I have previously created many functions that return character strings as char arrays (or at least pointers to them).
前几天有人指出,当我的函数返回时,我的函数指向的 char 数组已经超出范围,我现在基本上指向的是随机的内存位(一个讨厌的悬空指针).
The other day someone pointed out that when my functions return the char arrays pointed to by my functions have gone out of scope and I'm essentially now pointing to a random bit of memory (A nasty dangling pointer).
我有一段时间没有真正注意到这一点,因为输出到控制台时的 char 数组似乎没有损坏(可能是因为没有时间覆盖该数据).然而,当我返回一个通过读取经常损坏的串行端口生成的字符串缓冲区(字符数组)时,我确实注意到了这一点.
I didn't really notice this for a while because the char arrays when outputted to the console didn't appear to be corrupt (probably because there wasn't time for that data to be overwritten). I did however notice this when I was returning a string buffer (char array) generated by reading the serial port which was frequently corrupt.
那么,我应该如何做到最好?
So, how best should I do it?
我的错误代码如下:
#include <cstdlib>
#include <iostream>
using namespace std;
char* myBadFunction(){
char charArray[] = "Some string
";
char* charPointer = charArray;
return charPointer;
}
int main(int argc, char** argv) {
cout << myBadFunction();
return 0;
}
我知道我可能应该在调用函数之前在程序中分配内存或创建一个全局变量来放入返回的字符串,但是如果我调用的函数被许多不同的程序使用,它应该如何知道函数的大小缓冲区被提前传入,什么时候删除这个内存?
I understand that I should perhaps allocate memory in the program before calling the function or create a global variable to put the returned string in, but if my called function is used by many different programs when how should it know the size of the buffer being passed into it in advance and when should this memory be deleted?
以下代码也没有按照我的意愿正确执行:
The following code also doesn't do what I want it to properly:
#include <cstdlib>
#include <iostream>
using namespace std;
void fillArray(char* charPointer){
char charArray[] = "Some string
"; // Create string
charPointer = charArray; // Not correct, want to fill predefined array with created string
return;
}
int main(int argc, char** argv) {
char predefinedArray[50] = {0};
fillArray(predefinedArray);
cout << predefinedArray;
return 0;
}
我想填充指针解析指向的数组,但这不会发生在上面的代码中.
I want to fill the array that the pointer parsed points to but this doesnt' happen in the code above.
另外,我什么时候应该使用 new[] 命令来创建我的数组?需要吗?我应该什么时候调用 delete[] .
Also, when should I use the new[] command to create my array? is it needed? and when should I call delete[] on it.
非常感谢,这显然是非常基本的,但我一直做错了一段时间.
Many thanks for this, its obviously very fundamental but something I've been doing wrong for a while.
推荐答案
最简单的方法是返回一个 std::string
,如果您需要访问内部 char 数组,请使用 std::string::c_str()
.
The simplest way would be to return a std::string
, and if you needed access to the internal char array use std::string::c_str()
.
#include <iostream>
#include <string>
using namespace std;
string myGoodFunction(){
char charArray[] = "Some string
";
return string(charArray);
}
int main(int argc, char** argv) {
cout << myGoodFunction();
return 0;
}
如果您需要返回 char 数组以外的内容,请记住指针可以用作迭代器.这允许您将数组封装在向量或类似结构中:
If you need to return something other than a char array, remember that pointers can be used as iterators. This allows you to encapsulate an array in a vector or a similar structure:
vector<int> returnInts() {
int someNums[] = { 1, 2, 3, 4 };
return vector<int>(someNums, someNums + 4);
}
这篇关于如何返回在函数中创建的 char 数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何返回在函数中创建的 char 数组?
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01