如何在 Visual Studio 调试控制台中生成 EOF(或 ASCII 0)?
我有一个在 Windows 上运行的控制台模式程序。程序在循环中调用 getchar()
,直到返回 EOF
或 0
。我想在运行调试器时输入以下内容之一作为测试向量:
“abc\0
”或“abc\EOF
”
我似乎无法始终如一地我通过输入 a 尝试了在此问题中的建议。 bcCTRL-ZENTER”。这会将 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?
I have a console-mode program running on Windows. The program calls getchar()
in a loop unitl either an EOF
or a 0
is returned. I'd like to enter one of the following as a test vector while running the debugger:
"abc\0
" or "abc\EOF
I can't seem to consistently generate either. I tried the suggestion in this question by typing a bcCTRL-ZENTER". That returns 97,98,99,26
to my program, and then hangs on the next getchar()
call.
Entering CTRL-D doesn't hlep either, getchar
returns a 4 for the control char, then a newline char, and then it duplicates the line I just entered on the console. It's like VS is using the control characters as editing characters.
EDIT:
Here is a stripped down version of the code I am using. I see identical behavior in the debug console and in a command window.
#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]);
}
How do I enter an EOF or an ASCII 0 in the Visual Studio debug a Windows console?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
Try this one:
@Hans Passant 解决方案适用于我 - 也应该适用于 OP。
1 要生成 ASCII 0,请键入 (Ctrl+@) 或 (Ctrl+2)
2 要生成 EOF,请键入 (Ctrl+Z Enter),但输入缓冲区需要为空。因此,这通常是在 (Enter) 之后,即 (Enter Ctrl+Z Enter)。
但是OP代码有问题。
在 OP 代码中,如果出现字符 ASCII 255,则会将其分配给与 EOF 进行比较的
char
(-1)。请改用int ch
。这可以防止代码永远循环或在发生 EOF 时出错。
输入 ASCII 255
(Alt 键按下、数字键盘 2、数字键盘 5、数字键盘 5、Alt 键向上)
@Hans Passant solution works for me - should also work for OP.
1 To generate an ASCII 0, type (Ctrl+@ ) or (Ctrl+2 )
2 To generate an EOF, type (Ctrl+Z Enter), but the input buffer needs to be empty. So this is typically after an (Enter), thus (Enter Ctrl+Z Enter).
But OP code has problems.
In OP code, if the character ASCII 255 occurs , it gets assigned to a
char
(-1) which compares to EOF. Instead useint ch
.This prevents the code from looping forever or erring once an EOF occurs.
To enter ASCII 255
(Alt key down, num pad 2, num pad 5, num pad 5, Alt key up)