gpt4 book ai didi

C - 打印出奇怪的字符

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:25 25 4
gpt4 key购买 nike

我编写了一个小程序,它将成为 Windows 控制台中的文本编辑器。这是我现在写的:

#include <Windows.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
int space = 20;
int used = 0;
int key = 0;
char* text = malloc(sizeof(char) * space);

while (key != 27)
{
if (used >= space)
{
space += 20;
text = realloc(text, space);
}

key = getch();
if (key == 8)
{
used--;
system("cls");
for (int i = 0; i < used; i++)
{
putch(text[i]);
}
}
else
{
used++;

text[used] = key;
putch(text[used]);
}
}

free(text);
return 0;
}

当我在键盘上按下字母时打印效果很好。问题是当我按下退格键并尝试删除一个字符时。它开始在我写的文本中打印随机的“I”字符。我犯了什么错误,我该如何解决?

最佳答案

因一个错误而关闭。改变

used++;
text[used] = key;

text[used] = key;
...
used++;

一些样式说明:

首先,使用字 rune 字代替原始数字代码;例如,而不是写

if (key == 8)

使用

if (key == '\b')

如果没有预定义的字 rune 字(例如转义字符),请创建一个符号常量并使用它:

#define ESC 27
...
while (key != ESC)

这将使您的代码更容易被其他人理解。

其次,注意realloc;如果不能满足请求,则返回NULL。如果将该 NULL 值分配给 text 指针,您将失去对已分配内存的唯一引用。最好执行以下操作:

char *tmp = realloc( text, space + 20 );
if ( tmp )
{
text = tmp;
space += 20;
}

这样,如果 realloc 失败,您仍然可以引用之前分配的内存,允许您干净地释放它,或者以某种方式从错误中恢复.

关于C - 打印出奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651624/

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