更改动态* char的大小

时间:2019-04-12 20:03:05

标签: c

有没有办法使我的弦长均匀?

编辑: 我需要在结构中具有偶数长度的几个字符串。像这样:

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

所以最后还是类似第一个字符串“ hi \ 0 \ 0”第二个字符串“ hello \ 0”第三个字符串“ byebye \ 0 \ 0”,我需要随时更改它们,并且它们是动态分配的。 / p>

2 个答案:

答案 0 :(得分:1)

创建一个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");

答案 1 :(得分:0)

使用malloc()realloc()

char *string = malloc(STRING_SIZE);
strcpy(string, "hi");
string = realloc(string, STRING_SIZE+1);
string[STRING_SIZE] = '\0';