有关gcvt函数的问题

用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、示例:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-10
gcvt用起来挺恶心的,尤其是转换的浮点数没有小数部分的时候最后还有一个多余的小数点

建议使用sprintf(buffer, "%lf", double) ; 函数,相当完美,而且还可以自定输出格式,需要你加一个stdio头文件

各参数含义自行msdn本回答被提问者采纳
相似回答