从控制台阅读
i = _read(_fileno(stdin), &c, 1);
在VS 2013和VS2015中表现不同,当读取输入字的最后一个字符时,'返回'关键是到期。在再次呼叫该线路时
VS2013中的(及旧版本)c
将变为10
(行尾),_read
将返回1
(读取一个字节)
在VS2015中,c
将再次为10
,但_read
会返回0
错误或功能?
以下小型控制台程序显示了一些细节:
// ConsoleApplication1.c
#include <stdio.h>
#include <io.h>
#include <errno.h>
#include <fcntl.h>
int main()
{
char c;
int i, j;
char buf[128], buf2[128];
/* in 2015 this will return 0 at reading '\n' */
/* bug ? */
_setmode(_fileno(stdin), _O_TEXT);
/* this will return 1 at reading '\n' */
//_setmode(_fileno(stdin), _O_BINARY);
j = 0;
printf("Input:\n");
/* read characters from stdin until \n is hit */
do {
/* 3 lines excerpted from original program (ngspice simulator)*/
do
i = _read(_fileno(stdin), &c, 1);
while (i == -1 && errno == EINTR);
/**************************************************************/
if (i==0)
buf2[j] = '0';
else if (i == 1)
buf2[j] = '1';
else
buf2[j] = 'x';
buf[j++] = c;
} while (c != '\n');
buf[j] = '\0';
buf2[j] = '\0';
/* repeat the input */
printf("%s\n", buf);
/* type return value of _read */
/* last caracter is 0 in VC2015 and 1 in VC2013 */
printf("%s\n", buf2);
/* wait for user 'return' */
getchar();
return 0;
}
使用VC2010(和2008年,2013年),输出
Input:
asdfghj
asdfghj
11111111
使用VC2015我得到
Input:
asdfghj
asdfghj
11111110
答案 0 :(得分:0)
Bug,由Microsoft修复,用于下一个Visual Studio 2015 CRT版本