【问题标题】:int to string, char* itoaint 到字符串,char* itoa
【发布时间】:2012-04-22 10:52:21
【问题描述】:

试图让'sval'包含字符串“$1” - 数组索引0-499的“$500”。在下面的代码中,但是 itoa 在下面的代码中给了我奇怪的字符串:

    #include<iostream>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;


    typedef struct data_t {
        int ival;
        char *sval;
    } data_t;

    void f1(data_t **d);
    int main()
    {
    data_t *d;

        d=static_cast<data_t*>(malloc(500));  //is this even needed?
        d = new data_t[500];
        f1(&d);
    }

    /* code for function f1 to fill in array begins */
    void f1(data_t **d)
    {
        int i;
        char str[5];
        for (int i=0; i<500; i++)
        {
            (*d)[i].ival=i+1;
            itoa (i,str,10);
            (*d)[i].sval= str;
        }
    }

itoa 似乎也被贬值了,但这就是我在谷歌上搜索 int 到字符串时得到的结果

【问题讨论】:

  • 为什么?告诉我,为什么**d?????只是为了让你可以做(*d)[i]?真的吗?!
  • 您不应同时使用malloc 和new。顺便说一句,malloc 应该用sizeof(data_t)*500 而不是500 调用。但更好的是,你永远不应该在 C++ 中使用malloc,它只是为了与 C 兼容。
  • @littleadv 不是我的代码:这是一个面试测试,它可以让我失望
  • 我建议查看std::istringstream。
  • @Sun 不,您还需要 4 年的经验。这不是他们在大学里要教给你的东西(如果是的话 - 去另一所大学,在学校学习这个是在浪费你的上学时间)。

标签: c++ string char int


【解决方案1】:

你不需要ltoa,cout 应该没问题。为什么需要将数字及其字符串表示形式保留在数组中?当您执行cout &lt;&lt; 10 时,您会在输出中得到“10”,您不需要自己进行任何转换

另一方面,您在执行ltoa 时没有为字符串分配任何内存,您可能已经注意到这并不健康。您使用了一个局部变量(对于所有 500 个数组成员都相同),您在退出函数后尝试访问该变量 - 一个很大的禁忌,它未定义的行为。

还有:

    d=static_cast<data_t*>(malloc(500));  //is this even needed?
    d = new data_t[500];

没有。不仅不需要 - 根本不应该在那里!在 C++ 中 - 使用 new 和 delete,而不是 malloc,这是一个 C 函数。

【讨论】:

  • 感谢有关 malloc 的信息。尝试将“$1”-“$500”放入 sval 时,您会建议做什么?
  • 我建议不要这样做。如果绝对必要 - 使用std::string,而不是chars 的数组。如果绝对需要使用数组 - 请确保为它们实际分配一些内存。
  • 当你说为数组分配内存并且下面的代码很糟糕(猜测全局变量是 nono?)时,我在哪里分配它?另外,获得 sval = $1-$500 的最简单方法是什么?
  • @Sun - 我不确定我是否理解你的问题。你显然会把它分配到你使用它的地方,并在你用完后释放它。您需要阅读一些(或实际上相当多)关于 C++ 中动态内存处理的内容,这不是“评论级别”主题。
  • 我只需要 sval = $1-$500 :(
猜你喜欢
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 2021-11-29
  • 2013-06-12
  • 1970-01-01
  • 2014-05-01
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多