文本编辑器(第五节)

插入普通字符

让我们从编写一个函数开始,该函数用于在给定位置将单个字符插入到 erow 中。

kilo.c
步骤101
在行中插入字符

/*** 包含的头文件 ***/
/*** 宏定义 ***/
/*** 数据 ***/
/*** 终端相关函数 ***/
/*** 行操作函数 ***/
int editorRowCxToRx(erow *row, int cx) { … }
void editorUpdateRow(erow *row) { … }
void editorAppendRow(char *s, size_t len) { … }
void editorRowInsertChar(erow *row, int at, int c) {
  if (at < 0 || at > row->size) at = row->size;
  row->chars = realloc(row->chars, row->size + 2);
  memmove(&row->chars[at + 1], &row->chars[at], row->size - at + 1);
  row->size++;
  row->chars[at] = c;
  editorUpdateRow(row);
}
/*** 文件输入/输出函数 ***/
/*** 追加缓冲区函数 ***/
/*** 输出处理函数 ***/
/*** 输入处理函数 ***/
/*** 初始化函数 ***/

♎︎ 可编译,但无明显效果
memmove() 函数来自 <string.h> 头文件。它与 memcpy() 类似,但当源数组和目标数组重叠时使用它是安全的。

首先,我们验证 at,它是我们想要插入字符的索引。请注意,at 允许超出字符串末尾一个字符的位置,在这种情况下,字符应该插入到字符串的末尾。

扫描二维码关注微信公众号,回复密码,即可获取密码

阅读剩余
THE END