itoa()函数 Stack around the variable 'strtemp' was corrupted !!!???

来源:互联网 发布:淘宝活动平台 编辑:程序博客网 时间:2024/05/01 12:50

 C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:

# include 
# include 

void main (void);
void main (void)
{
int num = 100;
char str[25];
itoa(num, str, 10);
printf("The number 'num' is %d and the string 'str' is %s. /n" ,
num, str);
}

itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用 的基数。在上例中,转换基数为10。10:十进制;2:二进制...

下列函数可以将整数转换为字符串:
----------------------------------------------------------
函数名 作 用
----------------------------------------------------------
itoa() 将整型值转换为字符串
itoa() 将长整型值转换为字符串
ultoa() 将无符号长整型值转换为字符串

/////////////////////////////////////////
char   *itoa(int   value,char   *string,int   radix)    
  将整数value转换成字符串存入string,radix为转换时所用基数  
   
  char   *ltoa(long   value,char   *string,int   radix)    
  将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数  
   
  char   *ultoa(unsigned   long   value,char   *string,int   radix)    
  将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数  //
//////////////////////////////////////

记得给   char*   string   分配空间。你最好定义为   char   stirng[N],不然的话,恐怕会出点意想不到的错误甚至系统崩溃。

/////////////////////////

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=757366

Stack around the variable 'strtemp' was corrupted !!!???

楼主sycnick(李小虾)2005-08-25 19:04:50 在 VC/MFC / 基础类 提问

byte*   bshowsize=new   byte[size];  
  memcpy((LPSTR)bshowsize,(LPCSTR)fpread,size);  
   
  string   mystr("");  
  mystr.reserve(typen9*4+6);  
  int   iitemp   =   0;  
  char   strtemp;  
  for   (int   i=0;i<size;i++){  
  iitemp   =   128;  
  for   (int   k=0;k<8;k++){  
  itoa((bshowsize[i]&iitemp)>>(7-k),&strtemp,2);//"11101100"->'1','1','1','0',.....  
  mystr.push_back(strtemp);  
  iitemp=iitemp/2;  
  }  
  }  
  delete[]   bshowsize;  
   
  如上代码段,运行后(可以成功运行),但会提示:Run-Time   Check   Failure   #2   -   Stack   around   the   variable   'strtemp'   was   corrupted.不知道怎么回事!  
   
  请指教!

1 楼loveghb(温柔的毒药)回复于 2005-08-25 20:18:09 得分 20

你的栈被破坏了。  
   
  mystr.push_back(strtemp);         //这行代码什么意思?好象STL容器才有push_back吧?  
  我懒了,机器太老,VC7开起来太慢了,你自己检查了。  
   
  也可能错误代码不在这里,应该是你局部数组赋值时越界了。  
   
  比如这样的代码会导致这种可恶的错误  
  void   somefunction()  
  {  
      ......  
      int   a[10];  
      for   (int   i=0;   i<=10;   ++i)  
          a[i]   =   i;  
      ......  
  }  
  Top

2 楼sycnick(李小虾)回复于 2005-08-25 20:58:41 得分 0

找到错误了!!原来msdn上写得很清楚itoa()转换的时候要注意字符的BUF大小,要预留NULL位和符号位,而我只申请了一个char,肯定不够,希望大家同样能吸取教训,以后小心,呵呵  
   

原创粉丝点击