gpt4 book ai didi

c - 重复 '\0' 的数组长度,而不是 strlen

转载 作者:行者123 更新时间:2023-11-30 21:44:39 25 4
gpt4 key购买 nike

如果我需要找出重复'\0'字符的数组的长度,我该怎么办? strlen 没有用,因为它只会以 '\0' 结束。在这种情况下,最好的解决方案是什么?例如我有一个buf;现在我不知道长度。我需要找出长度,以便我可以读取其中的整个数据。

编辑:

无符号字符 buf[4096];

该缓冲区中有“\0”字符。但它发生在数据之间。即使有“\0”字符,我也需要读取数据。 strlen 无法解决目的。那么有什么办法呢?这是这里的部​​分问题:lzss decoding EOF character issue

代码就在那里。请看一下。

最佳答案

我认为有 3 种确定数组大小的可能性:

  1. 数组被声明为数组。可以使用sizeof运算符。 (很好,它已经在编译时间内解决了。)

  2. 数组作为指针传递。无法根据类型确定尺寸。必须以另一种方式提供。

  3. 数组长度可以由其内容决定。这用于 C 字符串,但也可以用于其他类型。 (考虑一下,结束标记本身消耗一个元素。因此,最大长度比容量小一。)

示例代码test-array-size.c:

#include <stdio.h>

/* an array */
static int a[5] = { 0, 0, 0, 0, -1 };

/* a function */
void func(int a1[], int len1, int *a2)
{
/* size of a1 is passed as len1 */
printf("a1 has %d elements.\n", len1);
/* len of a2 is determined with end marker */
int len2;
for (len2 = 0; a2[len2] >= 0; ++len2);
printf("a2 has (at least) %d elements.\n", len2 + 1);
}

/* HOW IT DOES NOT WORK: */
void badFunc(int a3[5])
{
int len = sizeof a3 / sizeof a3[0]; /* number of elements */
printf("a3 seems to have %d elements.\n", len);
}

/* the main function */
int main()
{
/* length of a can be determined by sizeof */
int size = sizeof a; /* size in bytes */
int len = sizeof a / sizeof a[0]; /* number of elements */
printf("a has %d elements (consuming %d bytes).\n", len, size);
/* Because this is compile-time computable it can be even used for
* constants:
*/
enum { Len = sizeof a / sizeof a[0] };
func(a, Len, a);
badFunc(a);
/* done */
return 0;
}

示例 session :

$ gcc -std=c11 -o test-array-size test-array-size.c 
test-array-size.c: In function 'badFunc':
test-array-size.c:19:20: warning: 'sizeof' on array function parameter 'a3' will return size of 'int *' [-Wsizeof-array-argument]
int len = sizeof a3 / sizeof a3[0]; /* number of elements */
^
test-array-size.c:17:18: note: declared here
void badFunc(int a3[5])
^

$ ./test-array-size.exe
a has 5 elements (consuming 20 bytes).
a1 has 5 elements.
a2 has (at least) 5 elements.
a3 seems to have 1 elements.

$

关于c - 重复 '\0' 的数组长度,而不是 strlen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961123/

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