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