函式原型:
char* itoa(int value, char* buf, int radix);
value:要轉換的引數
buf:轉換後儲存的空間
radix:按radix進製轉換
在使用的時候發現了乙個問題,以前沒關注過,如下:
char temp;
int a = 1;
itoa(a, &temp, 10); //將a==1按10進製轉換後存入temp
結果報錯資訊:run-time check failure #2 - stack around the variable 'temp' was corrupted.
執行時棧錯誤,後來經過查詢發現是itoa轉換後要在buf最後新增null結束符,而temp只是乙個字元,這就導致null新增不成功!
正確的做法是:
char temp[2];
int a = 1;
itoa(a, temp, 10);
這樣就對了,但是當把a改為兩位數後有可能會有錯誤,因為轉換後的每個數字都要佔乙個char的位置,也就是說如果a==1234,那麼temp大小必須至少是5個,即四個數字加乙個null結束符。
如果a為負數呢,假設a == -1067,那麼temp大小應該為多少呢? 實際上temp大小應該再加1,因為
temp[0]儲存的是符號('-'),如下圖所示:
那麼如果是正數有沒有符號位呢? 單步發現只有負數前面才有符號位,所以結論如下:
如果val為正數,則buf大小應該為val位數加1,末位為null位;
如果val為負數,則buf大小應該為val位數加2,buf[0]為負號,末位為null位。
切記!ps:vs2010下使用itoa顯示該warning c4996: 'itoa': the posix name for this item is deprecated. instead, use the iso c++ conformant name: _itoa. see online help for details.
即該函式itoa過時了,應該使用iso c++ conformant函式名 _itoa, 在使用_itoa時有提示可能不安全,讓使用_itoa_s。
Oracle中使用到的函式
1.字串相關 1 查詢字串 insrt函式 對指定字串進行判斷,判斷其是否含有指定的字元 instr 源字串 目標字串 開始位置 第幾次出現 用於模糊查詢以及判斷包含關係 select code,name,dept,occupation from staff where instr code,001...
php使用到的函式記錄一
birthdate 2010 1 1 6個月之後的時間 waydate date y m d strtotime 6 months strtotime birthdate 複製 array search 在陣列中搜尋給定的值,如果成功則返回首個相應的鍵名 sprintf return a forma...
Oracle使用到的一些函式
2.trim 函式 去除字串兩端的空格 3.length 函式 統計字串的長度 4.case when else end as 5.decode函式 decode value,if1,then1,if2,then2,if3,then3,else 6.substr 函式 substr string s...