是否可以在除结尾之外的某处使用带有 NULL
字符的字符串并使用它们?比如获取它们的大小,使用 strcat
等?
我有一些想法:
1) 编写您自己的函数来获取长度(或其他东西),它将遍历一个字符串。如果遇到 NULL
字符,它将检查字符串的下一个字符。如果它不是 NULL
- 继续计算字符数。但它可能(并且将会!)最终导致您在读取 char 数组之外的内存时出现这种情况。所以这是个坏主意。
2) 使用sizeof(array)/sizeof(type)
,例如sizeof(input)/sizeof(char)
。我认为这会非常有效。
对于如何做到这一点,您还有其他想法吗?也许有一些我不知道的功能(C 新手警报 :))?
我能想到的唯一真正安全的方法是使用“Pascal”类型的字符串(即具有字符串 header 和与其关联的各种其他数据的字符串)。
像这样:
typedef struct {
int len, allocated;
char *data;
} my_string;
然后您将不得不自己实现几乎每个字符串操作函数。保持“字符串的长度”和“分配的大小”允许您拥有比当前内容更大的分配,这可能会使重复的字符串连接更便宜(允许分摊 O(1) 追加)。
我是一名优秀的程序员,十分优秀!