首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int to string,char* itoa

int to string,char* itoa
EN

Stack Overflow用户
提问于 2012-04-10 14:01:17
回答 1查看 1.4K关注 0票数 0

正在尝试让“sval”包含字符串“$1”-“$500”,用于数组索引0-499。在下面的代码中,itoa在下面的代码中给出了奇怪的字符串:

代码语言:javascript
复制
    #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 to string时得到的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-10 14:06:56

你不需要ltoacout就可以了。为什么需要将数字及其字符串表示保留在数组中?当您执行cout << 10时,您将在输出中得到"10“,您自己不需要任何转换

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

和:

代码语言:javascript
复制
    d=static_cast<data_t*>(malloc(500));  //is this even needed?
    d = new data_t[500];

不是的。不仅不需要--根本不应该出现在那里!在C++中-使用newdelete,而不是malloc,这是一个C函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10083830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档