红联Linux门户
Linux帮助

一个小程序在Windows和Linux下运行结果不同的原因

发布时间:2007-09-08 21:36:22来源:红联作者:hearer
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
short int main()
{
int i;
char a[]="0.00000001";
long double ld_a;
char **endptr=NULL;

printf("a is : %s\n",a);
ld_a=strtod(a,endptr);
printf("after calling strtod(),a becomes to: %20.15f\n",ld_a);
scanf("%d",&i);
return 1;
}

linux 下运行结果:
a is : 0.00000001
after calling strtod(),a becomes to: -0.000000000000000

而 windows 下运行结果却是:
a is : 0.00000001
after calling strtod(),a becomes to: 0.000000010000000
文章评论

共有 7 条评论

  1. organization 于 2007-09-22 16:32:42发表:

    请问楼主我用gcc -o *.exe *.c编译的程序怎么不能在windows下运行呢?说是什么位置的16位应用程序。请告诉我怎么编译在windows下可以运行的c文件。谢谢。

  2. michaeljakson 于 2007-09-22 00:10:58发表:

    支持

  3. luciffer 于 2007-09-19 12:54:09发表:

    一看就知道你这个程序是有问题的,或者不是作者想要的结果。那个参数根本就没传进去!!!!!!!那来的结果。就算有结果也是个随机的,因为指针根本什么地方也没有指向。如果是一个好一点的编译器,连编译都过不了,还结果呢。

  4. tangfei 于 2007-09-14 23:58:50发表:

    tusheng:
    char a[]="0.00000001";
    此用法是正确的,因为这是字符数组,相当于字符串,没给它定义多长,如它“=”后面有n个字符,此字符数组长度就为n+1,因为还有一个是"\0"(字符串结束符)。
    我想问大家两个问题:
    1:short int main()
    这个short是什么意思
    2:char **endptr=NULL;
    这里两个*是干什么用的
    希望哪位高手能详细点给我解答,谢谢

  5. tusheng 于 2007-09-14 06:39:55发表:

    scanf("%d",&i);
    return 1;
    是什么意思?

    你运行的时候 ,a[]里头应该是定义大小的吧

  6. yorktown 于 2007-09-14 06:35:50发表:

    不过楼主 最后的 return 1; 算什么阿!

  7. yorktown 于 2007-09-14 06:35:15发表:

    strtod()是将字符串转换成长整型数
    其实在全在windows下,不同的编译器,结果也可能不同,就像 long double 不同编译器,它们所占位数也不一样的