Реалло c проблема - PullRequest
2 голосов
/ 17 марта 2020

У меня проблема. У меня есть штрих: «/ hello / world» Мне нужно скопировать слово «hello» в другую строку;

У меня есть этот код:

void copy(char *command) {// copy 
 char *word = NULL;
 int size = 1;
 if (*command == '/') {
    command++;
    while (*command != '/') {
         word = (char*)realloc(word, size * sizeof(char));
         *word = *command;
         size++;
         word++;
         command++;
     }
     printf("%s", word);
     free(word);
}

, но я получаю эту ошибку: Segmentation fault (core dumped)

Что я делаю не так?

1 Ответ

1 голос
/ 17 марта 2020

Как говорит @kaylum, причина того, что вы получаете ошибку, заключается в том, что вы меняете значение указателя word. Когда вы перераспределяете память для выделенного массива блока памяти и изменяете размер этого блока памяти, realloc() меняет размер и возвращает указатель, который указывает на первый блок памяти этого выделенного массива. В этом случае, если вы хотите изменить размер памяти word, попробуйте использовать индекс для доступа к вновь добавленному блоку памяти.

    void copy(char *command) {// copy
      char *word = NULL;
      printf("%s\n",command);
      int size = 1,index=0;``
      if (*command == '/') {
        command++;
        while (*command != '/') {
          word = (char*)realloc(word, size * sizeof(char));
          word[index] = *command;
          size++;
          command++;
          index++;
        }
        printf("%s\n", word);
        free(word);
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...