您的位置:程序门 -> c/c++ ->



很简单的c语言问题。感觉是puts的一个bug。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


很简单的c语言问题。感觉是puts的一个bug。[已结贴,结贴人:fbug]
发表于:2007-05-12 00:22:15 楼主
#include   <stdio.h>

void   main()
{
    char   s1[]={ 'h ', 'e ', 'l ', 'l ', 'o '};
    char   s2[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '\0 '};
    char   s3[]= "hello ";
    clrscr();   /*   @1   删除这一行   */
    puts(s1);
    puts(s2);
    puts(s3);
}
output:
==================
hello
hello
hello


而如果把上面的   @1标记处的行删除。//不使用clrscr()方法:
output:
==================
hellohello
hello
hello


有区别吗?
曾经我在做调试的时候,单步执行。结果出现过都是三个hello的情况。
关闭tc一段时间后再运行。又出现3个hello和4个hello的两种情况了。


感觉是bug。c高手来解释解释。。。
发表于:2007-05-12 01:03:541楼 得分:10
puts函数遇到 '\0 '表示输出字符串结束.
char   s1[]={ 'h ', 'e ', 'l ', 'l ', 'o '};   你这样定义后面没 '\0 '输出在哪结束呢??
不同的编译器还有可能出现乱码的..

这根本就是你定义字符串的时候出错了,并不是puts的bug.
char   s1[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '\0 '};这样定义不管你有没clrscr()都只会输出三个hello的
发表于:2007-05-12 01:06:562楼 得分:10
sorry,上面的有可能会产生点误解,我说的没有clrscr()时都只会输出三个hello,是指每次输出三个.每次运行前面输出的还会出现在屏幕上..
发表于:2007-05-12 01:13:433楼 得分:10
我也用tc3试了,运行结果是一样的啊
发表于:2007-05-12 01:21:584楼 得分:10
ls的你用vc++6.0及以上编译器试试...
发表于:2007-05-12 08:26:575楼 得分:10
这样就和环境有关了。

char   s1[]={ 'h ', 'e ', 'l ', 'l ', 'o '};
char   s2[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '\0 '};
...

如果s1和s2是连续的,那么puts(s1);也许会输出   hellohello......
但是也有可能是   输出   hello接一堆乱码。

puts   的结果不应该和   clsclr   有任何关系,
楼主你可以测试下这段代码:
        char   s1[]={ 'h ', 'e ', 'l ', 'l ', 'o '};
        char   s2[]={ 'h ', 'e ', 'l ', 'l ', 'o ', '\0 '};
        char   s3[]= "hello ";
        //system( "cls ");   /*   @1   删除这一行   */
        puts(s1);
        puts(s2);
        puts(s3);

最好使用多个环境试试,   比如   dev   c++   中
发表于:2007-05-12 08:31:006楼 得分:10
有些语句的环境相关性是无法揣摩的,
比如   system( "pause ");   在vc   中有时候会产生莫名其妙   的结果,
如果热心追查,   就看看其原因吧,
偶是没有多大的兴趣。

从理论上说,
puts   和   clsclr   不应该有什么关系的,
但是也许在   tc   中,   它们就被神秘的联系了起来   ...
发表于:2007-05-12 08:55:137楼 得分:10
和编译环境有关,支持jixingzhong(瞌睡虫·星辰)的说法
发表于:2007-05-12 09:15:418楼 得分:10
对,字符串和字符数组要区别开来的。。。。。。。。。。
发表于:2007-05-12 09:25:559楼 得分:10
up
发表于:2007-05-14 19:39:4610楼 得分:10
学习了


快速检索

最新资讯
热门点击