itoa函数的调用
的有关信息介绍如下:问题补充说明:#include 楼上的错的一塌糊涂的~~~~~ 首宪三道还千马育日包先我们来分析你这个代码要做什么事情,就是把数字123转换成字符串123 那么,你的程序当中只有一个字符型的指针变量,所以我们需要用molloc函数在内存中找到连续的一段空间,用来存放我们的数据,然后把这段空间的首经愿非地址转换成char*赋程输与盟值给str,这样,str就相当于字符型数组的头指针了。 问题分析完了,那么错误在哪里呢? 就是str=(char*)仅刚信别乡岁跳鱼布物malloc(siz议晶回伯陈eof(char));这里 存放字符串123,最少需要四个字节的地方,而一个char型变量占1字节,molloc里面的参数最小应该为4*sizeof(char) 然后我们再说,你这个程序为什么是运行时错误,而不是编译时错误 因为从语法上面来讲,你这个程序没有任何错误,所以编译器是不会检查出错误的。运行时错误,就是因为你开辟的空间准通考心专总乱定帝氢太小了,其实这种错误有时热曾示木投想派第也不能被发现,为什么呢?我们下面来说明 你在内存池中动态的申请了1个字节的空间,用来存放数据,那么比如说,刑厂系统给你分配的空间地址为123H,而恰巧在125H处的内存被另外一个程序占用着,并且被设置为其他程序不可写。呢灯用执行十蒸陈领那么在itoa()函数运行时,1赋值到了123H处,2到了124H处,那么当要将3赋值到125H处时,程序育军度世罪属龙就会报错~~错误是什么呢?肯定是“****内存为只读,不可写”类似这样的话,所以就出现了运行时错误。 那为什么有的积底阿静走同计考时候这种错误被我们发现不了呢?那是因为如果此时125H以果执五顺争大及126H都没有被其他程序所占用,那么系统还是允许你的程序对其进行赋值的,即使这块内存不是归你的程序所特有。 在上面的情况下,就不会调块发生运行时错误。 所以这种错误不是你的程序每谓尼结哥次运行都会报的~~~这也就是说明与你的str=NULL这句话根本没有关系,因为你的程序运行了两次,前后是没有关系的,前后系统内存的占用情况也不一样,所以导致分配到的地址可能也不同,就武客老神执题出现了一回报错,一回不报的情况。 综上所述,纸根视反技员个径革你的错误原因还是因为在动态申请内存空间的时候,地方申请小了,改法: str=(char*)malloc(4*sizeof(char));这个是最小的要求。 所以说楼上错的简直银解形济歌非是惨不忍睹呀~~~