首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-07 
很简单的c语言问题。感觉是puts的一个bug。#includestdio.hvoidmain(){chars1[]{ H , e , l , l , o }ch

很简单的c语言问题。感觉是puts的一个bug。
#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高手来解释解释。。。

[解决办法]
puts函数遇到 '\0 '表示输出字符串结束.
char s1[]={ 'H ', 'e ', 'l ', 'l ', 'o '}; 你这样定义后面没 '\0 '输出在哪结束呢??
不同的编译器还有可能出现乱码的..

这根本就是你定义字符串的时候出错了,并不是puts的bug.
char s1[]={ 'H ', 'e ', 'l ', 'l ', 'o ', '\0 '};这样定义不管你有没clrscr()都只会输出三个hello的
[解决办法]
sorry,上面的有可能会产生点误解,我说的没有clrscr()时都只会输出三个hello,是指每次输出三个.每次运行前面输出的还会出现在屏幕上..
[解决办法]
我也用TC3试了,运行结果是一样的啊
[解决办法]
LS的你用VC++6.0及以上编译器试试...
[解决办法]
这样就和环境有关了。

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++ 中
[解决办法]
有些语句的环境相关性是无法揣摩的,
比如 system( "PAUSE "); 在VC 中有时候会产生莫名其妙 的结果,
如果热心追查, 就看看其原因吧,
偶是没有多大的兴趣。

从理论上说,
puts 和 clsclr 不应该有什么关系的,
但是也许在 TC 中, 它们就被神秘的联系了起来 ...
[解决办法]
和编译环境有关,支持jixingzhong(瞌睡虫·星辰)的说法
[解决办法]
对,字符串和字符数组要区别开来的。。。。。。。。。。
[解决办法]
UP
[解决办法]
学习了

热点排行