0

试图让 'sval' 包含数组索引 0-499 的字符串“$1” - “$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 到字符串时得到的

4

1 回答 1

3

不需要ltoacout应该没问题。为什么需要将数字及其字符串表示形式保留在数组中?当你cout << 10在输出中得到“10”时,你不需要任何你自己的转换

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

和:

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

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

于 2012-04-10T06:06:55.810 回答