c++ - 如何编写返回 const char* 的函数,这是一个修改后的 const char* 参数?

标签 c++ c scope

我必须写一个函数(c++),它的定义是:

const char* getFileName(const char* name);

简而言之,此函数将获取名称、检查一些条件并为其附加一个后缀,使其成为一个正确的文件名。例如:

name = "someFile", return = "someFile-hd.png"

此函数返回的

const char* 将立即传递给另一个以const char* 作为参数的函数

something->loadFile(getFileName("someFile"));

我遇到的问题是,当我在我的函数中创建一个 const char* 时,它的范围将限于创建它的函数。另一方面,我不能修改 loadFile 函数的代码,因为它是我正在使用的第 3 方库。

我可以围绕 loadFile 编写一个包装器来删除我创建的 const char*,但我不想那样做,因为这是一个移植练习这会破坏我为简化操作而创建的一些模板。

有没有办法像我描述的那样编写这个函数?

谢谢

编辑: 小解释:

getFileName 是我正在尝试编写的函数,我可以更改返回类型,但它必须适合作为 loadFile 函数的参数。我的主要问题是 getFileName 返回的 const char* 要么因为超出范围而丢失,要么我必须明确删除它,这会破坏我的移植模板。我想在一个函数调用中生成文件名并且不做任何其他事情 [换句话说,在原始代码中我有 loadFile("something.png") 并且我想将它更改为 loadFile(getFileName("something")) 之后不添加任何新行。

最佳答案

如果您可以将 getFileName() 的返回类型更改为 std::string,您可以执行以下操作:

std::string getFileName(const char* a_name)
{
    std::string result(a_name);
    result += ".png";

    return result;
}

// No memory management req'd
something->loadFile(getFileName("someFile").c_str());

关于c++ - 如何编写返回 const char* 的函数,这是一个修改后的 const char* 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158488/

相关文章:

c - 如何从 native C DLL 显示简单的非模式窗口

JavaScript:在函数中初始化全局变量

javascript - 如何访问同一个 javascript 对象的成员?

C++:如何使用初始化列表初始化内部结构的成员?

c++ - 我应该使用哪种类型?

c++ createprocess - 命令行参数的字符串var - 没有任何反应

java - 对 Queap 数据结构的插入操作

c - 管道无法读取 Enter 键(C、Linux)

c - printf 没有按预期工作。有人可以解释输出吗?

Python为导入模块中的属性分配本地值