gpt4 book ai didi

c - _从 Visual Studio 2015 中的标准输入读取

转载 作者:行者123 更新时间:2023-11-30 17:06:14 24 4
gpt4 key购买 nike

从控制台读取

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

最佳答案

Microsoft 在下一个 Visual Studio 2015 CRT 版本中修复了该错误

关于c - _从 Visual Studio 2015 中的标准输入读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com