Изменение размера динамического * символа - PullRequest
0 голосов
/ 12 апреля 2019

Есть ли способ, как сделать мою строку равным размеру?

РЕДАКТИРОВАТЬ: Мне нужно несколько строк в структуре, которые имеют четную длину.Так что-то вроде:

struct msg { char * first; char * second; char * third; };

так что в конце это что-то вроде первой строки "hi \ 0 \ 0" вторая строка "hello \ 0" третья строка "byebye \ 0 \0 ", и мне нужно изменить их в любое время + они динамически распределяются.

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Создайте strdup_even().

Выделите память, необходимую для копирования строки, и, возможно, еще 1, чтобы сделать "ровным".

char *strdup_even(const char *str) {
  size_t len = strlen(str) + 1;  // Size needed for the _string_
  size_t len2 = len + len % 2;   // Even allocation size
  char *copy = malloc(len2);
  if (copy) {
    memcpy(copy, str, len);
    if (len2 > len) {
      copy[len] = '\0';
    }
  }
  return copy;
}

Пример использования

struct msg m;
m.first =  strdup_even("hi");
m.second = strdup_even("hello");
0 голосов
/ 12 апреля 2019

Используйте malloc() и realloc():

char *string = malloc(STRING_SIZE);
strcpy(string, "hi");
string = realloc(string, STRING_SIZE+1);
string[STRING_SIZE] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...