Pet*_*ter 2 c stdin fgets while-loop eof
所以基本上我想将我写入stdin(包括换行符)的所有内容复制到字符串以用于哈希目的.我设法完成了这个并制作了小代码来代表我的问题.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 10000
int main()
{
char *myStr = calloc(1,1);
char buffer[BUFFERSIZE];
while( fgets(buffer, BUFFERSIZE , stdin) != NULL ){
myStr = realloc(myStr, strlen(myStr)+1+strlen(buffer) );
strcat( myStr, buffer );
}
printf("\n%s\n",myStr);
}
Run Code Online (Sandbox Code Playgroud)
当我输入一些文本然后按ENTER键并调用EOF后,一切正常.
但是当我启动程序时输入"a"然后我尝试调用EOF(使用Ctrl Z+ ⏎(Windows cmd提示符),Ctrl D(Linux))我必须执行三次程序才能实际打破循环.我期待最多2次.
有人可以解释如何使用EOF,stdin和fgets工作吗?或者我应该使用其他东西(例如getline)?如果我不清楚我的问题,我很抱歉,只要问你需要什么.
谢谢.
首先,^ Z或^ D是对您正在使用的终端有意义的控制字符,有时这意味着终端可以发出文件结束信号.
无论如何,在输入文本后,终端会处理您的三个按键以执行以下操作:
您的程序内部对应于:
a
收到了,fgets
仍然继续阅读,直到文件结束或换行fgets
由于文件结束而完成.但是,由于字符被读取,因此它不会返回NULL,"a"
具体而言.fgets
由于文件结束而完成,并返回,NULL
因为没有读取字符.