c++ - int 到字符串,char* itoa

标签 c++ string char int

尝试让‘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 似乎也被折旧了,但这是我用 google 搜索 int to string 时得到的结果

最佳答案

你不需要ltoa , cout应该就好了。为什么需要将数字及其字符串表示形式保留在数组中?当你做 cout << 10您在输出中得到“10”,您不需要自己进行任何转换

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

和:

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

没有。不仅不需要——根本不应该存在!在 C++ 中 - 使用 newdelete , 从不 malloc ,这是一个 C 函数。

关于c++ - int 到字符串,char* itoa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10083830/

相关文章:

c - 在C中实现2个具有相同类型和名称但参数不同的函数

java - Java 中的字符运算

c - 来自另一个函数的动态格式化字符串

c - char数据类型在32位寄存器中是如何表示的?

c++ - 非冗余对列表中的对象索引

c++ - 如何使用cmake正确链接库?

c++ - 当我试图通过我的函数打印我的列表时出现段错误

c++ - 一个字符串开始另一个字符串是什么意思? C++

java - 将用户输入的句子中的每个单词与另一个文本进行比较(android/java)

TEXT 宏中的 C++ 字符串变量