C语言程序--诡异的结果

自信男孩 2013-09-20 08:16:06
#include <stdio.h>
int main (int argc, char* argv[ ])
{
double d = 3.4;
int b = 858993459;
printf("%d\n", d);
printf("%lf\n", b);

return 0;
}

各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
...全文
654 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
初一公主奶爸 2013-12-27
  • 打赏
  • 举报
回复
楼上都没说到点子上。这个问题其实是printf的机制导致的。printf是无法验证类型的,printf里面只能根据你提供的格式来从栈里对应的地址里取数据。你入栈是按照整型,结果你取的时候按照float,所以就乱了。这就和以下代码类似: int a = 12345; float *b = (float *)&a; float c = *b; 此时 c 的值就和 a 的值不一样了。
清竹小雨 2013-09-22
  • 打赏
  • 举报
回复
引用 22 楼 ko1_1ok 的回复:
[quote=引用 19 楼 XianBT 的回复:] [quote=引用 18 楼 ko1_1ok 的回复:] [quote=引用 14 楼 XianBT 的回复:] 这并非是特例,您可以试试其他数,不一定是3.4,结果并非特例,我这样的解释也是具有普遍性的,而您的解释说值会变化,会截取,却无法解释为何对任何数值都是产生一样规律的结果。
请你解释下-1.999? [/quote] #include <stdio.h> int main(void) { int b = 1821066134; double a = -1.999; printf("%d\n", a); printf("%lf\n", a); printf("b: %d\n", b); printf("b: %lf\n", b); return 0; } 1821066134 -1.999000 b: 1821066134 b: -1.999000 输出是这个目测和我的解释也没什么出入啊,对啊,标准是有说如果转换说明符是非法的结果是未定义的,我并没说不是啊,未定义应该是说在各种实现中的解释不同,依赖编译器,但是结果也许是可预测的,也许是不可的,楼主只是要求解释出现这个诡异结果的原因,而我的解释也许正好就解释了这个未定义的某种情况,虽然可能没有普遍性,但也好歹解释了在这种情况下是为什么。有时候仅仅给疑惑者一句话,这是未定义的结果,可能不能让人清楚一些原理呢。。 [/quote] 你当然YY想成这样了,看我上传的图片。。。你的解释当然也没有普遍性,要是有普遍性,那也可以解释我代码的结果。。。1.double是8字节,而int是4字节的,要说位模式相同,这个理由就足以抗你。2.如果你要说double低4字节和int的位模式相同,b=1时,以%lf打印还是-1.999啊。。你又是如何解释呢?估计这个解释,你要看计算机原理、编译原理和GCC编译器的实现。我的讨论到此为止。
#include <stdio.h>
int main(void)
{
        int     b = 1;
        double  a = -1.999;
        printf("%d\n", a);
        printf("%lf\n", a);
        printf("b: %d\n", b);
        printf("b: %lf\n", b);
        return 0;
}
[/quote] 当然,我的分析是建立在我的操作系统平台和编译器版本上
清竹小雨 2013-09-22
  • 打赏
  • 举报
回复
引用 19 楼 XianBT 的回复:
[quote=引用 18 楼 ko1_1ok 的回复:]
[quote=引用 14 楼 XianBT 的回复:]
这并非是特例,您可以试试其他数,不一定是3.4,结果并非特例,我这样的解释也是具有普遍性的,而您的解释说值会变化,会截取,却无法解释为何对任何数值都是产生一样规律的结果。


请你解释下-1.999?
[/quote]

#include <stdio.h>

int main(void)
{
int b = 1821066134;
double a = -1.999;
printf("%d\n", a);
printf("%lf\n", a);
printf("b: %d\n", b);
printf("b: %lf\n", b);
return 0;
}

1821066134
-1.999000
b: 1821066134
b: -1.999000

输出是这个目测和我的解释也没什么出入啊,对啊,标准是有说如果转换说明符是非法的结果是未定义的,我并没说不是啊,未定义应该是说在各种实现中的解释不同,依赖编译器,但是结果也许是可预测的,也许是不可的,楼主只是要求解释出现这个诡异结果的原因,而我的解释也许正好就解释了这个未定义的某种情况,虽然可能没有普遍性,但也好歹解释了在这种情况下是为什么。有时候仅仅给疑惑者一句话,这是未定义的结果,可能不能让人清楚一些原理呢。。
[/quote]
你当然YY想成这样了,看我上传的图片。。。你的解释当然也没有普遍性,要是有普遍性,那也可以解释我代码的结果。。。1.double是8字节,而int是4字节的,要说位模式相同,这个理由就足以抗你。2.如果你要说double低4字节和int的位模式相同,b=1时,以%lf打印还是-1.999啊。。你又是如何解释呢?估计这个解释,你要看计算机原理、编译原理和GCC编译器的实现。我的讨论到此为止。
#include <stdio.h>
int main(void)
{
int b = 1;
double a = -1.999;
printf("%d\n", a);
printf("%lf\n", a);
printf("b: %d\n", b);
printf("b: %lf\n", b);
return 0;
}


方紫涵 2013-09-22
  • 打赏
  • 举报
回复
引用 2 楼 AnYidan 的回复:
格式符号与变量不匹配,undefined behaviour
清竹小雨 2013-09-21
  • 打赏
  • 举报
回复
引用 16 楼 XianBT 的回复:
[quote=引用 9 楼 ko1_1ok 的回复:] [quote=引用 7 楼 XianBT 的回复:] [quote=引用 6 楼 XianBT 的回复:] [quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] 要检验他们在内存中的二进制是否相等也很容易啦,试试这段代码,完全可以用我刚刚说的解释,怎么样是不是清楚为什么了? #include <stdio.h> int main(void) { double a = 3.4; printf("%d\n", a); printf("%lf\n", a); return 0; } 在我的机子上输出结果是 858993459 3.400000 毫无疑问,我刚刚说的得到了验证了。。。[/quote] 在这个例子,碰巧而已。 在C语言里 1.从int or float转换到double类型,精确值能保留下来 2.从double or float转换成int类型,将会向零截断。C标准并没有对这种情况规定固定结果。 另外,如果采用80位扩展精度格式,由于截断或溢出,数据从寄存器回到内存,再取回寄存器,其值会产生一些变化,这对程序员来说是不可见的,所以会产生一些奇独的结果[/quote] 在这个例子,碰巧而已。 在C语言里 1.从int or float转换到double类型,精确值能保留下来 2.从double or float转换成int类型,将会向零截断。C标准并没有对这种情况规定固定结果。 另外,如果采用80位扩展精度格式,由于截断或溢出,数据从寄存器回到内存,再取回寄存器,其值会产生一些变化,这对程序员来说是不可见的,所以会产生一些奇独的结果 而且我认为在这里并没有进行精度的转换,因为我觉得精度的转换是出现在含有不同精确的运算表达式中才会出现的,而这里却没有不同精度的运算,表达式仅仅是一个变量,所以情况仅仅是单纯的访问方式而已,个人愚见,,,[/quote] 那你解释下-1.999会转换成什么? ***************************************** 我标准还没有看完就回答了,引用标准的语句 9 If a conversion specification is invalid, the behavior is undefined. 239) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined. 来源:ISO/IEC 9899:1999 (E)
糖馅饼 2013-09-21
  • 打赏
  • 举报
回复
引用 9 楼 ko1_1ok 的回复:
[quote=引用 7 楼 XianBT 的回复:] [quote=引用 6 楼 XianBT 的回复:] [quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] 要检验他们在内存中的二进制是否相等也很容易啦,试试这段代码,完全可以用我刚刚说的解释,怎么样是不是清楚为什么了? #include <stdio.h> int main(void) { double a = 3.4; printf("%d\n", a); printf("%lf\n", a); return 0; } 在我的机子上输出结果是 858993459 3.400000 毫无疑问,我刚刚说的得到了验证了。。。[/quote] 在这个例子,碰巧而已。 在C语言里 1.从int or float转换到double类型,精确值能保留下来 2.从double or float转换成int类型,将会向零截断。C标准并没有对这种情况规定固定结果。 另外,如果采用80位扩展精度格式,由于截断或溢出,数据从寄存器回到内存,再取回寄存器,其值会产生一些变化,这对程序员来说是不可见的,所以会产生一些奇独的结果[/quote] 在这个例子,碰巧而已。 在C语言里 1.从int or float转换到double类型,精确值能保留下来 2.从double or float转换成int类型,将会向零截断。C标准并没有对这种情况规定固定结果。 另外,如果采用80位扩展精度格式,由于截断或溢出,数据从寄存器回到内存,再取回寄存器,其值会产生一些变化,这对程序员来说是不可见的,所以会产生一些奇独的结果 而且我认为在这里并没有进行精度的转换,因为我觉得精度的转换是出现在含有不同精确的运算表达式中才会出现的,而这里却没有不同精度的运算,表达式仅仅是一个变量,所以情况仅仅是单纯的访问方式而已,个人愚见,,,
自信男孩 2013-09-21
  • 打赏
  • 举报
回复
引用 7 楼 XianBT 的回复:
[quote=引用 6 楼 XianBT 的回复:] [quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] 要检验他们在内存中的二进制是否相等也很容易啦,试试这段代码,完全可以用我刚刚说的解释,怎么样是不是清楚为什么了? #include <stdio.h> int main(void) { double a = 3.4; printf("%d\n", a); printf("%lf\n", a); return 0; } 在我的机子上输出结果是 858993459 3.400000 毫无疑问,我刚刚说的得到了验证了。。。[/quote] +++ 呵呵,非常感谢!
糖馅饼 2013-09-21
  • 打赏
  • 举报
回复
这并非是特例,您可以试试其他数,不一定是3.4,结果并非特例,我这样的解释也是具有普遍性的,而您的解释说值会变化,会截取,却无法解释为何对任何数值都是产生一样规律的结果。
自信男孩 2013-09-21
  • 打赏
  • 举报
回复
引用 6 楼 XianBT 的回复:
[quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] +++,非常感谢~
自信男孩 2013-09-21
  • 打赏
  • 举报
回复
引用 5 楼 max_min_ 的回复:
在论坛混的这么久了, printf函数式格式化输出应该是老问题了吧! 格式不对应的话,输出的结果是无法预知的!没什么好说! 格式对了,出现诡异的现象可以讨论下!
如果你试着运行一下,看一下结果是随机的呢,还是固定的???!!!
自信男孩 2013-09-21
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
呵呵,
糖馅饼 2013-09-21
  • 打赏
  • 举报
回复
引用 18 楼 ko1_1ok 的回复:
[quote=引用 14 楼 XianBT 的回复:] 这并非是特例,您可以试试其他数,不一定是3.4,结果并非特例,我这样的解释也是具有普遍性的,而您的解释说值会变化,会截取,却无法解释为何对任何数值都是产生一样规律的结果。
请你解释下-1.999? [/quote] #include <stdio.h> int main(void) { int b = 1821066134; double a = -1.999; printf("%d\n", a); printf("%lf\n", a); printf("b: %d\n", b); printf("b: %lf\n", b); return 0; } 1821066134 -1.999000 b: 1821066134 b: -1.999000 输出是这个目测和我的解释也没什么出入啊,对啊,标准是有说如果转换说明符是非法的结果是未定义的,我并没说不是啊,未定义应该是说在各种实现中的解释不同,依赖编译器,但是结果也许是可预测的,也许是不可的,楼主只是要求解释出现这个诡异结果的原因,而我的解释也许正好就解释了这个未定义的某种情况,虽然可能没有普遍性,但也好歹解释了在这种情况下是为什么。有时候仅仅给疑惑者一句话,这是未定义的结果,可能不能让人清楚一些原理呢。。
水平不流 2013-09-21
  • 打赏
  • 举报
回复
个人觉得。。这个问题,其实没有必要讨论太多。 有什么用呢?又有哪个标准允许这样用呢?
清竹小雨 2013-09-21
  • 打赏
  • 举报
回复
引用 7 楼 XianBT 的回复:
[quote=引用 6 楼 XianBT 的回复:] [quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] 要检验他们在内存中的二进制是否相等也很容易啦,试试这段代码,完全可以用我刚刚说的解释,怎么样是不是清楚为什么了? #include <stdio.h> int main(void) { double a = 3.4; printf("%d\n", a); printf("%lf\n", a); return 0; } 在我的机子上输出结果是 858993459 3.400000 毫无疑问,我刚刚说的得到了验证了。。。[/quote] 在这个例子,碰巧而已。 在C语言里 1.从int or float转换到double类型,精确值能保留下来 2.从double or float转换成int类型,将会向零截断。C标准并没有对这种情况规定固定结果。 另外,如果采用80位扩展精度格式,由于截断或溢出,数据从寄存器回到内存,再取回寄存器,其值会产生一些变化,这对程序员来说是不可见的,所以会产生一些奇独的结果
lm_whales 2013-09-21
  • 打赏
  • 举报
回复
试试这个看结果 int main (){ double a = 3.4; printf("%lld,%llx\n", a,a); printf("%lf\n", a); long long *la =(long long)&a; unsigned int * ia=(int *)&a; printf("%lld,%llx\n", *la,*la); printf("%d,%d\n", *ia,*ia); return 0; } 结果如下: as long long = 4614838538166547251,400b333333333333 as double = 3.400000 ptr cast to long long ,value=4614838538166547251,400b333333333333 ptr cast to unsigned int ,val =858993459,1074475827 至于 贴主的代码 #include <stdio.h> int main (int argc, char* argv[ ]) { double d = 3.4; int b = 858993459; printf("%d\n", d);//%d-->int int 比double内存占用小, // char, short, int---》int; // int 32Bits 参数传递时是4字节,double 8字节 // 够用,截取一部分使用而已 printf("%lf\n", b);//%lf,%f --->double ,b---》 int 4字节 不够用,则拼凑 // 堆栈当前内容: // [ b ]实参 b // [EFLAGS ] 状态寄存器, // [ret address = next code address ]返回地址 // [ ]printf的自动变量 return 0; } 状态寄存器,和返回地址的的顺序,大概如此,不记得了; 如果这个顺序是对的,b,和调用函数前的状态寄存器的值凑成一个double ,输出; 否则b,和函数返回地址的值,凑成一个double ,输出。 所以,这种输出绝对是非常诡异的!!
糖馅饼 2013-09-21
  • 打赏
  • 举报
回复
引用 6 楼 XianBT 的回复:
[quote=引用 楼主 cfjtaishan 的回复:]
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。 [/quote] 要检验他们在内存中的二进制是否相等也很容易啦,试试这段代码,完全可以用我刚刚说的解释,怎么样是不是清楚为什么了? #include <stdio.h> int main(void) { double a = 3.4; printf("%d\n", a); printf("%lf\n", a); return 0; } 在我的机子上输出结果是 858993459 3.400000 毫无疑问,我刚刚说的得到了验证了。。。
糖馅饼 2013-09-21
  • 打赏
  • 举报
回复
引用 楼主 cfjtaishan 的回复:
#include <stdio.h>
int main (int argc, char* argv[ ])
{
	double d = 3.4;
	int b = 858993459;
	printf("%d\n", d);
	printf("%lf\n", b);

	return 0;
}
各位同仁,最近遇到一个让我匪夷所思的问题,希望大家能帮忙解决!大家对这个问题的结果,可以尽情的发表个人看法,本人尽所能提供分数。先谢谢了~~~
是这样的,double d = 3.4; int b = 858993459; 在这里,你的d 和 b其实在计算机中都是以二进制方式存储的,无论是浮点数还是整数都是二进制的存在内存当中,对吧?计算机无法知道你在该块内存中存的到底是浮点数还是整数,但c是怎么知道的呢?在这里,C程序是用你所使用的格式化说明符来访问该变量,就是说怎么解释存在这个地址中的二进制的含义,你用%lf就会以浮点方式访问这些二进制,你用%d就是用整型方式访问这些存在内存中的二进制,其实在这里3.4 和 858993459 在内存中的二进制是一样的,由于是一样的数值在内存中,你用什么格式说明符访问,就怎么解释他们,所以会有这样的结果啦。
清竹小雨 2013-09-21
  • 打赏
  • 举报
回复
引用 14 楼 XianBT 的回复:
这并非是特例,您可以试试其他数,不一定是3.4,结果并非特例,我这样的解释也是具有普遍性的,而您的解释说值会变化,会截取,却无法解释为何对任何数值都是产生一样规律的结果。
请你解释下-1.999?
max_min_ 2013-09-20
  • 打赏
  • 举报
回复
在论坛混的这么久了, printf函数式格式化输出应该是老问题了吧! 格式不对应的话,输出的结果是无法预知的!没什么好说! 格式对了,出现诡异的现象可以讨论下!
AnYidan 2013-09-20
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/100022764
加载更多回复(3)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧