在尝试通过我的代码获取用户输入时,我遇到了一个奇怪的问题。我很确定问题不在于代码,而是与标准输入流(stdin
)或类似的操作系统有关,但是因为我没有其他具有类似操作系统设置的机器(因为实际上不可能找到SCO)现在的机器),我希望有一些程序化的解决方法来解决这个问题。我的程序从'\n'
终止的用户读取一个字母数字字符流。
但无论我如何尝试通过不同的方式实现这一点,它只接受最初的256个字符。最初我怀疑问题是fgets
函数,但是当我使用fgets
尝试从文件读取相同的值时,它按预期工作。
方法1:
main()
{
char szInLine[999];
memset(szInLine, 0, sizeof(szInLine));
fprintf(stdout, "\nPlease enter the encrypted value:\n");
if (fgets(szInLine, 997, stdin) == NULL)
return(1);
fprintf(stdout, "Encrypted data string contains %i characters: %s\n",
strlen(szInLine), szInLine);
}
方法2:
while(ch = getc(stdin)) != EOF)
{
if((*szInLine++ = ch) == '\n')
{
break;
}
}
*szInLine = '\0';
fprintf(stdout, "Encrypted data string contains %i characters: %s\n", strlen(szInLine), szInLine);
两种情况的输出:“加密数据字符串包含256个字符:abcde .....
我已尝试但未成功的其他方法包括更改保存值的缓冲区的数据类型(从字符串到unsigned long
),动态分配内存到缓冲区,将stdin
设置为无缓冲的e.t.c.
操作系统环境:SCO Unix,32位编译器:CC
请参阅SCO网站上的ioctl()和stty()手册页。您应该能够通过测试终端与重定向来检索设置中的差异。