您的位置首页生活小窍门

itoa函数的调用

问题补充说明:#include using namespace std; int main() { int num=123; char *str; str = (char*)malloc(sizeof(char)); itoa(num,str,10); cout<<"number="<

楼上的错的一塌糊涂的~~~~~

首先我们来分析你这个代码要做什么事情,就是把数字123转换成字符串1360问答23

那么,你的程序当中只有一个字符型的指针变量,所以我们需要用molloc函数在内存中找到连续的一段空间,用来存放我们的数据,然后把这段空间的首地址转换成char*赋值给str,这样跑帝剧,str就相当于上伯不期理字符型数组的头指针了。

问题分析完了,那么错误在哪里呢?

就是str=(char*)malloc(sizeof(char));这里

存放字符串123,最少需要四个字节的地方,而一个char型变量占1字节,molloc里面的参数最小应该为4*sizeof(char)

然后我们再说,你这个程序为什么是运行时错误,而不是编译时错误

因为商宁从语法上面来讲,你这个程序没有任何错误,所以编译器是不会检查出错误的。运行时错误,就是因为你开辟的空间太小了,其务尔实这种错误有时也不能被发现输两宣烧南两线限难盾,为什么呢?我们下面来说明

你在内存池中动态的申请了1个字节的空间,用来存放数据,条化春线信已干越封队那么比如说,系统给你分配的空间地址为123H,而恰巧在125H处的内存被另外一个程序占用着,并且垂商铁听命被设置为其他程序不可写。那么在itoa()函数运行时,1赋值到了123H处,2到了124H处,那么当要将3赋值到125H处时,程序就会报错~~错误是什么呢?肯定是“****内存为只读,不可写”类似这样的慢今话,所以就出现了运行时错误。

那为什么有的时候这种错误被我们发现不了呢?那是因为如果此时125H以及126H都没有被其他程序所占用跟测本兵象利,那么系统还是允许你的程序对布停安曲肥死明罪充年其进行赋值的,即使这块内存不是归你的程序所特有。

在上面的情况下,就不会发生运行时错误。

所以这种错误不是你的程序每次运行实文都会报的~~~这也就是说明与你的str=NULL这句话根本没有关系,因为你的程序运行了两次,前后是没有关系的,前后系统内存的占用情况也不一样,所以导致分配到的地址可能也不同,就出现了一回报错,一回不报的情况。

综上所述,你的错误原因还是因为在动态申请内存空间的时候,地方申请小了,改法:

str=(char*)mall背化个皇的露多oc(4*sizeof(char));这个是最小的要求。

所以说楼上错的简直是惨不忍睹呀~~~