首页 > 解决方案 > 该函数收集数组并返回它。之后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创建的,因此即使分配了指针也无法释放它。我应该怎么办?

标签: c++arraysfunctionpointerscout

解决方案


但是还有一个问题,ansicode数组占用的内存会不会继续占用内存呢?

C 风格的数组具有自动生命周期,它们将在本地范围结束后被销毁,因此在函数返回后尝试对它们执行任何操作是未定义的行为,您应该考虑使用如下容器std::string

std::string setFore(const short arg) {
     return "\033[38;5;" + std::to_string(arg) + "m";
}

推荐阅读