gpt4 book ai didi

c - 区分嵌入式 NUL 和 NUL 终止符

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:04 25 4
gpt4 key购买 nike

我有一个 const char* 指向十六进制格式的数据,我需要找到我正在检查的数据的长度 NUL-terminator 但是当\x00 出现时它检测到它作为 NUL 终止符返回不正确的长度。
我该如何解决这个问题?

const char* orig = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00"
uint64_t get_char_ptr_len(const char *c)
{
uint64_t len = 0;
if (*c)
{
while (c[len] != '\0') {
len++;
}
}
return len;
}

最佳答案

\x00 NUL 终止符;事实上,\x00只是另一种写法 \0 .

如果您的字节数据包含嵌入的 NUL,则不能将 NUL 用作终止符、句点;您必须同时保留指向数据的指针和数据大小,就像对“原始字节”(例如 memcpyfwrite )进行操作的函数一样。

至于字面量,确保你初始化了一个数组(而不仅仅是指向它的指针)以便能够使用sizeof 检索它的大小。 :

const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";

现在您可以使用 sizeof(orig)获取它的大小(这将比显式写入的字符数长一个,因为末尾有隐式 NUL 终止符);不过要小心,因为数组在几乎所有可用的情况下都会衰减为指针,尤其是在传递给函数时。

关于c - 区分嵌入式 NUL 和 NUL 终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50787121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com