【问题标题】:How can I generate an EOF (or an ASCII 0) in a visual studio debug console?如何在 Visual Studio 调试控制台中生成 EOF(或 ASCII 0)?
【发布时间】:2012-01-19 20:08:39
【问题描述】:

我有一个在 Windows 上运行的控制台模式程序。程序在循环单元中调用getchar(),返回EOF0。我想在运行调试器时输入以下内容之一作为测试向量:

abc\0”或“abc\EOF

我似乎也无法始终如一地生成。我通过键入 a bcCTRL-ZENTER尝试了建议 in this question >"。这会将97,98,99,26 返回到我的程序,然后挂起下一个getchar() 调用。

输入 CTRL-D 也无济于事,getchar 为控制字符返回 4,然后是换行符,然后它复制了我刚刚在控制台上输入的行。就像VS使用控制字符作为编辑字符一样。

编辑:
这是我正在使用的代码的精简版本。我在调试控制台和命令窗口中看到了相同的行为。

#define MAXSZ 4096
int main(int argc, char **argv)
{
   short int data[MAXSZ]={0}, i=0; 
   char c;
   do {
      if (i==MAXSZ) break;
      c = getchar();
      if (c!=EOF) data[i]=c;
   } while (data[i++]!=0);
   for (i=0;data[i]&&i<MAXSZ;i++)
      putchar(data[i]);
}

如何在 Visual Studio 调试 Windows 控制台中输入 EOF 或 ASCII 0?

【问题讨论】:

  • 可以通过输入 Ctrl+@(按住 Ctrl,按 2 键)输入二进制零,在屏幕上回显为 ^@。由于 getchar() 使用缓冲,因此您必须按下 Enter 键。或使用&lt;conio.h&gt; 中的_getch() 输入无缓冲文本。
  • 这就是我最终用于测试的解决方案。我仍然想知道是否可以可靠地生成在 Enter 键之前处理的 EOF。

标签: visual-studio eof getchar


【解决方案1】:

试试这个:

<Enter><Ctrl-Z><Enter>.

【讨论】:

  • 对不起,第二个例子应该是 CTRL-D。修复并扩展了信息。
  • 这很奇怪。你能发布你用来检查EOF的代码吗?
【解决方案2】:

@Hans Passant 解决方案适用于我 - 也应该适用于 OP。
1 要生成 ASCII 0,请键入 (Ctrl+@) 或 (Ctrl+2)
2 要生成 EOF,请键入 (Ctrl+Z Enter),但输入缓冲区必须为空。所以这通常是 一个 (Enter) 之后,因此是 (Enter Ctrl+Z Enter)。

但是OP代码有问题。

char c; // should be int ch
do {
   ...
   c = getchar();
   if (c!=EOF) data[i]=c;
} while (...);

在 OP 代码中,如果出现 ASCII 255 字符,则将其分配给与 EOF 比较的 char (-1)。而是使用int ch

   if (c!=EOF) data[i]=c;
   // should be
   if (c==EOF) break;
   data[i]=c;

这可以防止代码永远循环或在 EOF 发生时出错。


输入 ASCII 255
(Alt 键向下,数字键盘 2,数字键盘 5,数字键盘 5,Alt 键向上)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多