strcpy导致初始化变量导致分段错误

时间:2020-05-28 18:12:05

标签: c string segmentation-fault text-editor strcpy

我正在扩展kilo 文本编辑器,包括复制和粘贴。我遇到了段错误,我将其缩小范围是由于strcpy。我正在使用typedef存储有关标记的信息。这是该typedef以及它的使用位置:

typedef struct editorCursor {
  char copied[80];
  int marking;
  int sx;
  int sy;
} cursor;
struct editorSyntax {
  char *filetype;
  char **filematch;
  char **keywords;
  char *singleline_comment_start;
  char *multiline_comment_start;
  char *multiline_comment_end;
  int flags;
};

我的strcpy看起来像这样:

void editorCopy() {
  strcpy(E.cursor->copied,editorPrompt("What to copy %s", NULL)); 
}

这是函数编辑器提示:

char *editorPrompt(char *prompt, void (*callback)(char *, int)) {
  size_t bufsize = 128;
  char *buf = malloc(bufsize);
  size_t buflen = 0;
  buf[0] = '\0';
  while (1) {
    editorSetStatusMessage(prompt, buf);
    editorRefreshScreen();
    int c = editorReadKey();
    if (c == DEL_KEY || c == CTRL_KEY('h') || c == BACKSPACE) {
      if (buflen != 0) buf[--buflen] = '\0';
    } else if (c == '\x1b') {
      editorSetStatusMessage("");
      if (callback) callback(buf, c);
      free(buf);
      return NULL;
    } else if (c == '\r') {
      if (buflen != 0) {
        editorSetStatusMessage("");
        if (callback) callback(buf, c);
        return buf;
      }
    } else if (!iscntrl(c) && c < 128) {
      if (buflen == bufsize - 1) {
        bufsize *= 2;
        buf = realloc(buf, bufsize);
      }
      buf[buflen++] = c;
      buf[buflen] = '\0';
    }
    if (callback) callback(buf, c);
  }
}

0 个答案:

没有答案