C 重复“\0”的数组长度,而不是strlen
若我需要找出重复'\0'字符的数组的长度,我应该怎么做?strlen将不起作用,因为它将仅以“\0”停止。在这种情况下,最好的解决方案是什么? 例如,我有一个buf; 现在我不知道长度。我需要找出长度,这样我就可以读取其中的全部数据 编辑: 无符号字符buf[4096] 此buf中包含“\0”字符。但它发生在两个数据之间。即使使用“\0”字符,我也需要读取数据。斯特伦无法解决这个问题。那怎么办? 这是问题的一部分:C 重复“\0”的数组长度,而不是strlen,c,strlen,C,Strlen,若我需要找出重复'\0'字符的数组的长度,我应该怎么做?strlen将不起作用,因为它将仅以“\0”停止。在这种情况下,最好的解决方案是什么? 例如,我有一个buf; 现在我不知道长度。我需要找出长度,这样我就可以读取其中的全部数据 编辑: 无符号字符buf[4096] 此buf中包含“\0”字符。但它发生在两个数据之间。即使使用“\0”字符,我也需要读取数据。斯特伦无法解决这个问题。那怎么办? 这是问题的一部分: 代码在那里。请看一下。在我的脑海中,有3种可能决定数组大小: 数组被声明为数组。
代码在那里。请看一下。在我的脑海中,有3种可能决定数组大小: 数组被声明为数组。可以使用sizeof运算符。很好,现在是喜剧时间 数组作为指针传递。无法根据类型确定大小。它必须以另一种方式提供 数组长度可以由其内容决定。这用于C字符串,但也可用于其他类型。考虑,结束标记消耗一个元素本身。因此,最大长度比容量小一倍 示例代码测试数组大小。c:
你是如何声明数组的?是的,我声明了@Lashanne数组的长度是4096你的问题不是数组的大小;这是关于内容的长度,因为它是你的内容和你的使用要求,只有你才能知道答案。实际数组的大小显而易见:4096个元素。@ninja.stop查看“encodeunc_数据、compr_数据和有效负载”。我想知道第三个参数的作用是什么。。。。。。。。。。。。。。。。。?
#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;
}
$ 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.
$