是否可以在GCC中全局禁用以NUL结尾的字符串?
我正在使用自己的字符串库,而且我完全不需要最后的NUL字符,因为它已经在结构中内部存储了适当的长度。
但是,如果我想追加10个字符串,这意味着在堆栈上不必要地分配10个字节。对于宽字符串,情况更糟:对于x86,浪费了40个字节;对于x86,浪费了80个字节!
我定义了一个宏来将这些堆栈分配的字符串添加到结构中:

#define AppendString(ppDest, pSource) \
  AppendSubString(ppDest, (*ppDest)->len + 1, pSource, 0, sizeof(pSource) - 1)

使用sizeof(...) - 1效果很好,但我想知道是否可以去掉NUL终止以节省几个字节?

最佳答案

这非常糟糕,但是可以显式指定每个字符数组常量的长度:

char my_constant[6] = "foobar";
assert(sizeof my_constant == 6);

wchar_t wide_constant[6] = L"foobar";
assert(sizeof wide_constant == 6*sizeof(wchar_t));

关于c - 在GCC中禁用字符串的NUL终止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1772078/

10-11 01:26
查看更多