将int转换为char *

时间:2012-05-05 00:58:11

标签: c++ c++11 string-formatting

我无法完成以下工作:

char* int_toChar ( int num ) {
    char* str = "0";
    if ( num != 0 ) {
        char* prefix = "";
        char* chars = " 123456789";
        int id = 0;
        for ( int i = 0; i < num; ++i ) {
            str = prefix + chars[id];
            if ( id == 9 ) {
                id = 0;
                //prefix = (char*)("") + chars[id];
            } else {
                ++id;
            }
        }
    }
    return str;
}

这个函数我做的是因为我想使用printf_s而不是cout,但是我想要一个将int转换为char *的函数,这样我就可以在除printf_s之外的其他函数中使用它了

3 个答案:

答案 0 :(得分:1)

我的意思是尽可能最好的方式,但是这个函数有很多错误,很难说从哪里开始: - 你正在循环使用num,你的输入。如果你给你的功能数字2000000000,我不想看看会发生什么。 -char *不是字符数组。这是一个指针。你不能像它是一个值那样返回它,因为str指向的内存在此函数返回后不再是你的。 - 在第8行,你要添加一个指向角色的指针

如果你真的想要得到这样的东西,在我看来你有点了解C语言,指针,以及C如何处理字符串。我只想使用sprintf(str,“%i”,num);现在,如果你想避免cout。

答案 1 :(得分:1)

你的问题从这里开始:

 char* str = "0";

字符串文字不是可写内存。

之后情况会变得更糟。

为什么不使用itoa

答案 2 :(得分:0)

你将不得不分配一些内存来以某种方式放置转换后的int,无论是静态还是动态。如果你分配一个静态缓冲区,那么你可以将转换后的int写入它并返回一个指向它的指针,就像你发布的函数的接口所示,但是你要返回的char *字符串只会继续包含那个数字,直到下次调用该函数时。或者你可以动态地分配一个缓冲区来放置转换后的int的字符(使用malloc()或new),然后你的函数的调用者将负责以后free()'或删除分配的缓冲区,否则你有内存泄漏。如果您事先知道您的函数只能使用有限次数来创建固定数字字符串,尤其是那些需要在程序生命周期中存在的字符串,那么您不一定要释放/删除它们。确保分配它的方式,为可能需要创建的最大数字字符串分配足够的空间,可能基于int的大小(12个字符足以表示任何正或负32位整数值)。

现在,一旦分配了内存缓冲区,就需要将解码后的int值写入其中。您可以使用自己的自定义循环来实现这一点,这肯定会涉及使用我在代码中没有看到的/和%(除法和运算符)运算符,或者最好使用已经可用的标准库函数来执行此操作那对你而言。一种方法是使用sprintf(myBuffer,“%d”,num)。