0621,,・´∀`・,,)っ-○○○
2014/03/11(火) 22:38:20.94サイズを格納して管理しようぜ。
typedef char* OreoreString;
#define OreoreStringSize(buf) (*(uint32_t*)(buf-4))
#define OreoreStringRewriteSize(buf, newSize) (*(uint32_t*)(buf-4) = newSize)
OreoreString OreoreStringAlloc(size_t n) {
char* buf = malloc(n + 4);
if (!buf) return NULL;
*((uint32_t*)buf) = n;
return buf + 4;
}
void OreoreStringFree(OreoreString buf) {
free(buf - 4);
}
OreoreString OreoreStringDuplicate(OreoreString src) {
int size = OreoreStringSize(src);
char* cpy = malloc(size + 4);
if (cpy) memcpy(cpy, src-4, size);
return cpy;
}
こんなコードをだいがくいちねんせいくらいに書いたことがあったが
なにげにMacのCoreFoundationの文字列がこれに近いデータ構造に
なってるんだよな。
NULL終端つけておけば普通のC文字列関数も使えるし。