Ошибка сегментации, вызванная strcpy для инициализированной переменной - PullRequest
0 голосов
/ 28 мая 2020

Я расширяю текстовый редактор kilo , чтобы включить в него копирование и вставку. Я получаю segfault, который я сузил из-за 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)); 
}

Вот редактор функций Prompt:

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);
  }
}

...