c_cpp c中简单的扩展char缓冲区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp c中简单的扩展char缓冲区相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

// Sample expandable char buffer in C

#define CharBuf_SPACE(chb) (chb->cap - chb->len)
#define CharBuf_FULL(chb) (chb->cap == chb->len)

typedef struct
{
  size_t len;
  size_t cap;
  char data[0];
} CharBuf;

CharBuf* CharBuf_new(size_t size)
{
  CharBuf* newbuf = malloc(sizeof(CharBuf) + size);
  newbuf->len = 0;
  newbuf->cap = size;
  return newbuf;
}

void CharBuf_expand(CharBuf** cb, size_t factor)
{
  (*(cb))->cap *= factor;
  *cb = realloc(*cb, (*(cb))->cap);
}

void CharBuf_put(CharBuf* cb, char ch)
{
  if(CharBuf_FULL(cb)) CharBuf_expand(&cb, 2);
  cb->data[cb->len++] = ch;
}

// Prints all the chars in the char buffer 
void CharBuf_print(CharBuf* cb)
{
  for(size_t i = 0; i < cb->len; i++) putc(cb->data[i], stdout);
  putc('\n', stdout);
}

int main(void) {
  CharBuf* foo = CharBuf_new(5);
  CharBuf_put(foo, 'a');
  CharBuf_put(foo, 'a');
  CharBuf_put(foo, 'a');
  CharBuf_put(foo, 'a');
  CharBuf_put(foo, 'a');
  CharBuf_put(foo, 'b');
  CharBuf_put(foo, 'c');
  CharBuf_print(foo);
  return 0;
}

以上是关于c_cpp c中简单的扩展char缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的strcpy啥意思,简单点解释

c_cpp 在C中使用静态缓冲区进行数字加载

c_cpp 在c中检查null char

c_cpp 在cpp中使用char数组

c_cpp 在const char **中使用strtod

c_cpp 更改特定字符串中的char