我已将30个元素的数组声明为: -
unsigned char some_array[30];
我在数组中存储了一些元素,例如: -
{0xFB, 0x07, 0x0B, 0x02, 0x00, 0x0C, 0x03, 0x08, 0x0F, 0x0F, 0x07, 0x0A, 0x09, 0x06, 0x0D}
我需要找到这个数组中的元素数量。
sizeof (some_array) / sizeof (some_array[0]);
得到30,这是数组可以存储的元素总数。
strlen(some_array);
产生4,这是数组中0x00元素的索引。
如何确定存储在数组中的元素数量?
答案 0 :(得分:2)
如果将元素定义为“除0x00之外的任何内容”,则for循环将执行此操作。
int len = sizeof (some_array) / sizeof (some_array[0]);
int count = 0;
for(int i = 0 ; i < len; i++)
{
if (some_array[i] != 0x00) count++;
}
/* count is now the number of non 0 elements */
根据你的评论看起来你有一个30元素阵列,但只填充前15个,并希望15作为“答案”。数组仍然有30个元素,没有办法(我知道)从数组中确定你只将15个值放入其中。
答案 1 :(得分:2)
数组中的元素数量为30。
如果您想知道您为其指定值的元素数量,则必须明确跟踪。没有办法区分具有某个赋值的数组元素和未初始化的元素,其(垃圾)值恰好是相同的值。
答案 2 :(得分:2)
没有内置的C构造来完成你的要求。
正如你所说,C可以告诉你你已经分配了多大的数组。但是,它没有在数组中存储有意义值的概念。当你声明数组时,它有30个(可能是垃圾值)元素,当你在其中放入一些自己的值时,它仍然有30个元素,其中一些是你的值,其中一些是垃圾。
strlen()
适用于strings,这是C中一种特殊类型的char
数组,它存储一个空字节来标记字符串的结尾。
答案 3 :(得分:2)
像这样定义宏:
#define INITIALIZE_LIST {0xFB, 0x07, 0x0B, 0x02, 0x00, 0x0C, 0x03, 0x08, 0x0F, 0x0F, 0x07, 0x0A, 0x09, 0x06, 0x0D}
#define INITIALIZE_LIST_SIZE sizeof((unsigned char[])INITIALIZE_LIST)
要使用的示例代码:
#include <stdio.h>
#define INITIALIZE_LIST {0xFB, 0x07, 0x0B, 0x02, 0x00, 0x0C, 0x03, 0x08, 0x0F, 0x0F, 0x07, 0x0A, 0x09, 0x06, 0x0D}
#define INITIALIZE_LIST_SIZE sizeof((unsigned char[])INITIALIZE_LIST)
int main(void){
unsigned char some_array[30] = INITIALIZE_LIST;
size_t size = INITIALIZE_LIST_SIZE;
printf("Number of initialize list is %zu\n", size);
for(size_t i = 0; i < size; ++i)
printf("%02X ", some_array[i]);
return 0;
}
答案 4 :(得分:1)
在C中,构建函数中没有查找存储在数组中的元素数,因为数组中所有未填充的字段都有一些值。它只能找到数组的总大小。
执行此操作的一种方法是在将值加载到数组(不包含特殊字符)之前,使用预定义的特殊字符填充整个数组。例如;
unsigned char some_array[30];
memcpy(some_array, '\0', 30);
Then load some values to array;
strlen(some_array);
此处strlen(some_array);
将返回数组中的字符数
答案 5 :(得分:0)
在分配实际值之前,您可以在整个数组上执行var json = [{"Google":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Linkedin":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Uber":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Akamai":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Apple":[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]},
{"Hulu":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"IBM":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Spotify":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
{"Amazon":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}];
json.forEach(function(n){
Object.keys(n).forEach(function(x) {
document.writeln(x + ' is ' + n[x] + '</br>');
})
}) ;
,这将设置一个您确定不会成为初始化值范围的值,例如0xff。然后进行memset
循环计数。
for