c++ - 可以创建匿名非常量字符数组吗?

标签 c++ arrays char constants

我正在使用旧的 C++ 编译器,它的 STL 中没有 std::to_string(...)。我想将一个整数字符串化,所以我想我被 char* itoa (int value, char* str, int base) 困住了。我想避免创建一个命名的 char[] 用作 itoa() 的第二个参数。这能做到吗?

我知道我可以做

itoa(5, "abcd", 10)

但这实际上是不正确的,因为“abcd”实际上是一个 const char[],我怀疑由此产生的行为充其量是未定义的。当然,放弃常量是 Not Acceptable 。

有什么方法可以将参数列表中的匿名 非常量 char[] 传递给函数吗?我在各种尝试中使用了语法,但无法想出任何东西。我在网上四处查看,包括 StackOverflow,但没有遇到任何完全涵盖此内容的问答。

感谢指导。

更新:

我在原帖中忘记提到:我还需要将 char[] 放在堆栈上,即 newing/mallocing char[] 不是' 此练习的一个选项。

更新 2:

我收到了一些上下文请求,所以这里是:

重申一下:我坚持使用不支持 std::to_string(...)

的旧编译器

我本来想做的:

std::string foo(std::string(itoa(42, < *** non-const stack-allocated char[] *** > , 10)))

即我真正想做的是构造一个带有整数字符串化的 std::string

为什么?好的,更多上下文:

我正在尝试创建一个命名信号量,并将其命名为附加 pid。所以这个调用理论上看起来像这样:

sem_open(std::string(typeinfo(*this).name()).append(std::string(itoa(getpid(), < *** non-const stack-allocated char[] *** >, 10))))

我为什么要这样做?

Looks to me like this might be the case of missing the forest for the trees

也许吧。这在一定程度上是一项学术练习,我只是想知道它是否在 C++ 语法范围内可以做到这一点。但除此之外,通过避免堆分配还有一个代码卫生元素:我肯定会忘记在我的析构函数中delete[] char。此外,我假设的 char[] 的生命周期实际上只需要用于创建信号量。从句法上保证它只在需要的时候存在不是很好吗?这毕竟是RAII,所以最终这个问题是RAII是否可以针对这种特定情况实现。

再次感谢您的回答和评论。

更新 3

谢谢大家的回答。我认识并理解给出的答案,但我希望找到一个也能避免包装函数的答案。我的疏忽导致我没有在原始问题中提及这一点。这个问题一开始可能措辞不当;我应该首先揭示上下文是为了创建一个信号量,它也可能以不同方式引导评论者。我试图简洁准确地表达我的问题,但我试图简化问题陈述,但最终留下了相关的上下文;对不起..

不过,我自己得出了一个不敬虔的答案。我可能已经正式潜入IOCCC领土,虽然:

sem_open(std::string(typeinfo(*this).name()).append(static_cast<std::ostringstream&>(std::ostringstream() << getpid()).str().c_str()))

最佳答案

在我看来,这可能是只见树木不见森林的情况。

据我了解您的问题,您正在尝试实现 std::to_string 的替代品,因为你的编译器没有它。

并且您想为一个简单的用例实现它 int转换。

只需让包装函数调整 std::vector<char> 的大小即可足够了,将它用于 char *用于转换的缓冲区,然后构造一个 std::string从缓冲区中,您的替换函数返回。

并且,对于纯 C++ 解决方案:

std::string int_to_string(int n)
{
    std::ostringstream o;

    o << n;

    return o.str();
}

关于c++ - 可以创建匿名非常量字符数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563898/

相关文章:

java - 将 Scanner next 字符串转换为 Int 并检查输入的文本是否为数字

c - 如何从 ASCII 码中获取字符

c++ - 电子表格的 xml 格式

c++ - 无法将 'this' 指针从 'const Bullet' 转换为 'Bullet &'

c++ - 如何计算预期的核心文件大小

sql - 在 PostgreSQL 中按数组元素分组

c++ - 以整数作为模板参数的函数模板的显式实例化

python - numpy.diff 问题的导数

c - 使用指针在函数外部操作数组?

c - 用用户输入填充 *char[]