当我使用字符串时。我有这样的事情:
#include <stdio.h>
#define MAXLINE 1000
main(){
int c;
int i=0;
char s[MAXLINE];
while(c=(getchar()) !=EOF)
{
s[i] = c;
++i;
}
}
我想在写HELLO
之类的内容然后点击enter
来断行后,'\ n'首先添加到字符流或Null终止字符之后,即'\ 0 '
在视觉上哪一个正确表示正在发生的事情: (1)HELLO \ n \ 0 要么 (2)HELLO \ 0 \ n
答案 0 :(得分:1)
编写代码的方式,s
没有添加NUL字符。
由于您一次只读取输入的一个字符,如果您希望s
被NUL终止,您需要自己添加NUL。
答案 1 :(得分:0)
重要的是,EOF不等同于换行符。循环将仅在 EOF ,即Ctrl + D(在linux中)终止。按下回车时不会终止。
getchar()是一个从标准输入中读取字符的函数。 EOF是C中用于表示已达到END OF FILE的特殊字符。
getchar()的返回值是:
1.成功时,返回字符读取(提升为int值)
2.返回类型为int以适应特殊值EOF,表示失败:
3.如果标准输入位于文件末尾,则该函数返回EOF并设置标准输出的eof指示符(feof)。
4.如果发生其他一些读取错误,该函数也会返回EOF,但会设置其错误指示符(ferror)。
因此每个换行符都将存储在String中,而不是终止循环。并且它不会在末尾添加任何NULL字符,因此不会有NULL字符。相反,它可以是hello \ n(其中&#39; \ n&#39;将在系统中存储为0x0A)