很简单的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
[解决办法]
学习了