c++ - 该函数收集数组并返回它。之后ciout内存还是被这个数组占用了吧?
问题描述
我有以下功能:
void setFore(const short arg) {
char ansicode[12] = "\e[38;5;";
char code[4];
snprintf(code, 4, "%d", arg);
strcat(ansicode, code);
strcat(ansicode, "m");
std::cout << ansicode; }
使用它看起来像
std::cout << "Some text";
setFore(50);
std::cout << "Some text\n";
执行后,数组 ansicode 会被自动删除。我想做这样的功能:
char* setFore(const short arg) {
char ansicode[12] = "\e[38;5;";
char code[4];
snprintf(code, 4, "%d", arg);
strcat(ansicode, code);
strcat(ansicode, "m");
return &ansicode; }
并将其用作std::cout << "Some text" << setFore(50) << "Some text\n";
. 但是还有一个问题,ansicode数组占用的内存会不会继续占用内存呢?由于数组不是用new创建的,因此即使分配了指针也无法释放它。我应该怎么办?
解决方案
但是还有一个问题,ansicode数组占用的内存会不会继续占用内存呢?
C 风格的数组具有自动生命周期,它们将在本地范围结束后被销毁,因此在函数返回后尝试对它们执行任何操作是未定义的行为,您应该考虑使用如下容器std::string
:
std::string setFore(const short arg) {
return "\033[38;5;" + std::to_string(arg) + "m";
}
推荐阅读
- pentaho - Pentaho - 搜索 xml 文件
- udp - skb_tail_pointer(skb) 无法正常工作。并错误地指向 udp 标头尾部
- javascript - 我正在尝试将 mongodb 服务器与节点连接
- java - 在 docx4j 中创建新标头
- c++ - 保存一个 char* 参数介绍一个字符串
- swiftui - 为什么那些 NavigationLinks 不可点击?
- android - 进入flutter run后出现错误-“正在运行Gradle任务'assembleDebug'......”
- python - 如何在数据帧上使用 groupby 和 filter 函数而不会出现重复?
- python - 在 BeautifulSoup 中提取 div 的属性值
- xamarin - 我如何在 Visual Studio MAC 中制作存档 iPA。最新版本出现错误