我无法完成以下工作:
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之外的其他函数中使用它了
答案 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)。