1

如果我有一个包含 NULL 字节的字符指针,是否有任何内置函数可以用来查找长度,或者我只需要编写自己的函数?顺便说一句,我正在使用 gcc。

编辑:

应该提到字符指针是使用 malloc() 创建的。

4

3 回答 3

8

如果您有一个指针,那么了解大小的唯一方法是单独存储大小或具有终止字符串的唯一值。(通常'\0')如果你没有这些,那根本就做不到。

编辑:既然您已经指定使用分配缓冲区,malloc那么答案就是上面的段落。您需要记住分配了多少malloc或只是有一个终止值。

如果您碰巧有一个数组(例如char s[] = "hello\0world";:),那么您可以使用sizeof(s). 但是要非常小心,当你用指针尝试它的时候,你会得到指针的大小,而不是数组的大小。(但strlen(s)会相等5,因为它计数到第一个'\0')。

此外,数组在传递给函数时会衰减为指针。所以如果你把数组传递给一个函数,你又回到了原点。

笔记:

void f(int *p) {}

void f(int p[]) {}

void f(int p[10]) {}

都是一样的。在所有 3 个版本中,p是一个指针,而不是一个数组。

于 2012-06-13T23:41:54.883 回答
1

如果字符串包含 NULL 字节作为字符串的一部分,您如何知道字符串的结尾?当然,没有内置函数可以处理这样的字符串。它将第一个空字节解释为字符串的结尾。

如果您想要长度,则必须自己存储。请记住,没有标准库字符串函数可以在这样的字符串上正常工作。

于 2012-06-13T23:41:45.460 回答
1

您需要自己跟踪长度。

C 字符串是空终止的,这意味着第一个空字符表示字符串的结束。所有内置字符串函数都依赖于此,所以如果你有一个缓冲区可以包含 NULL 作为数据的一部分,那么你就不能使用它们。

由于您正在使用malloc,因此您可能需要跟踪两种大小:分配的缓冲区的大小,以及该缓冲区中有多少字符构成有效数据。

于 2012-06-13T23:42:06.893 回答