c中关于while((ch=getchar())!='0')的疑义

c中关于while((ch=getchar())!='0')的疑问
按说c中字符串结束的标志不是'\0'吗。。
为什么如果写成
while((ch=getchar())!='\0')
输入什么都不能结束,结果改成while((ch=getchar())!='0')就好了呢?

还有,c中有没有类似gets()的函数,用来读入一个未知长度的字符串,但是字符数组的下标可以从1开始的呢?

谢谢大家~~~
------解决方案--------------------
引用:
引用:C/C++ code??12int ch;while((ch = getchar()) != EOF)
这个不加ctrl+z是不是也不行啊。。。。

是键盘输入的话 需要ctr+z  要是从文本读入的话文件结尾的标志就是eof

------解决方案--------------------
0是0,它是字符串的结束符。
EOF是EOF,具体是多少不明,它是文件结束的标志。

------解决方案--------------------
字符串和字符是不一样的,令\0作为终止符跟令eof做终止符是同样道理,为了计算机更方便的执行。你的问题比较含糊,你最好把你什么地方不懂说的更具体一点,这样大家就不会更片面的解决你的问题
------解决方案--------------------
推荐使用WinHex软件查看文件或内存中的原始字节内容。