用API写一个windows小程序,里面用到了gcvt函数。编译正常,运行后每到这个函数处就报错,错误如下:
Debug Error:
Program: ...
Module:
file: i386\chkesp.c
Line: 42
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
(Press Retry to Debug the Application)
如果把gcvt函数注释掉就正常
下面函数的作用是把一个浮点数的小数部分转换成字符串,代码如下:
#include <windows.h>
#include <stdlib.h>
...
void show (double a, char buffer[])
{
char decimal[8] = {0} ;
int i, m = 0 ; //m代表是负数
a = a - (long)a ;
gcvt (a, 7, decimal) ; //注释掉就没错,否则就有弹窗报错
for (i = 0; decimal[i] != '\0'; i++)
buffer[i] = decimal[i] ;
buffer[i] = '\0' ;
}
请问用法是不是错了,或者用什么办法可以通过
1ãgcvtæ¯ææµ®ç¹æ°è½¬æ¢æå符串ï¼åæ¶è¿åä¸ä¸ªæåå符串çåå¨ä½ç½®çæéçå½æ°ã
2ãç¨æ³ï¼ char *gcvt(double value, int ndigit, char *buf);
å å«å¤´æ件:<stdlib.h>
åæ°
valueââ被转æ¢çå¼ã
Digitsââåå¨çæææ°åä½æ°ã
Buffeââç»æçåå¨ä½ç½®ã
è¿åå¼
è¿åä¸ä¸ªæåç»æçåå¨ä½ç½®çæé
3ã说æï¼gcvtå½æ°æä¸ä¸ªæµ®ç¹å¼è½¬æ¢æä¸ä¸ªå符串(å
æ¬ä¸ä¸ªå°æ°ç¹åå¯è½ç符å·åè)并åå¨è¯¥å符串å¨bufferä¸ã该bufferåºè¶³å¤å¤§ä»¥ä¾¿å®¹çº³è½¬æ¢çå¼å ä¸ç»å°¾ç空å符('\0'),å®æ¯èªå¨æ·»å çãå¦æä¸ä¸ªç¼å²åºç尺寸为digitsç尺寸+1,该å½æ°è¦ç该ç¼å²åºçæ«å°¾ãè¿æ¯å 为转æ¢çå符串å
æ¬ä¸ä¸ªå°æ°ç¹ä»¥åå¯è½å
å«ç¬¦å·åææ°ä¿¡æ¯ãä¸æä¾ä¸æº¢åºãgcvtè¯å¾ä»¥åè¿å¶æ ¼å¼äº§çdigitsæ°å,å¦æä¸å¯è½,å®ä»¥ææ°æ ¼å¼äº§çdigitsæ°å,å¨è½¬æ¢æ¶å¯è½æªé¤å°¾é¨ç0ã
4ã示ä¾ï¼