【发布时间】:2015-04-20 23:06:15
【问题描述】:
所以基本上我想将我写入标准输入的所有内容(包括换行符)复制到字符串以用于哈希目的。我设法做到了这一点,并编写了小代码来代表我的问题。
#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);
}
当我输入一些文本然后按 ENTER 并在我调用 EOF 之后一切正常。
但是当我启动程序时输入“a”然后我尝试调用 EOF(使用 Ctrl Z + ⏎(Windows cmd 提示符),Ctrl D (Linux)) 我必须执行 3 次才能让程序真正打破循环。我预计最多2次。
谁能解释一下使用 EOF、stdin 和 fgets 是如何工作的?还是我应该使用其他东西(例如 getline)?很抱歉,如果我不清楚我的问题,请问您需要什么。
谢谢。
【问题讨论】:
-
不能使用Ctrl+Z,因为终端使用Ctrl+Z挂起进程!
-
@SergioFormiggini Ctrl+Z 是 Windows 上的 EOF 字符。
-
好的!我忘记了 Windows:p
标签: c while-loop stdin eof fgets