我有一个这样的数组:
char data[512];
清除我的数组使用:
memset(&data[0], 0, sizeof(data));
我定义了:
#define NELEMS(x) (sizeof(x) / sizeof(x[0]))
但是当我试图得到我的数组时,它仍然给出了512;
int a = NELEMS(data);
我想清除我的数组,然后添加一些元素,如何获取数组中的元素数(插入元素)?
答案 0 :(得分:3)
data
是一个512 char
变量(1个字节)的数组,因此sizeof(data)
是512.这是正确的。阅读有关数据类型的更多信息。
答案 1 :(得分:2)
您似乎只是'清空'数组,而不是删除它。
data
始终为sizeof 512
,因为这是您初始化它的内容。 “清除”内容不会调整其大小,只有删除并重新创建它才会改变大小。
您可能想要的是
null
'值(获取元素数量)或者,取决于您要找的内容
a = 0;
就目前而言,看起来您希望在下一个可用空间中添加一个值,因此这里的第一个要点应该是您正在寻找的内容。
LINK:
答案 2 :(得分:0)
没有直接的方法来计算您实际添加到"数组"的值。
如果"数据"应该是"字符串",并且您想知道字符串中的字节数,您可以尝试strlen(数据),假设您始终具有以空值终止的内容。但我怀疑这是你要做的事情。
如果你(在数组中寻找第一个非空字符,则需要使用WHILE循环进行迭代。
答案 3 :(得分:0)
您可以跟踪阵列中的数量;
void add_char_to_array(char array[], unsigned int *index, char input)
{
array[(*index)++] = input;
}
void clear_array(char array[], size, unsigned int *index)
{
memset(&array[0], 0, size);
*index = 0;
}
int main()
{
char data[512];
unsigned int index = 0;
//do stuff
clear_array(data, sizeof(data), &index);
add_char_to_array(data, &index, a);
add_char_to_array(data, &index, b);
add_char_to_array(data, &index, c);
add_char_to_array(data, &index, d);
}
这将导致data
包含:['a','b','c','d','\0','\0','\0'...]
和index
将包含4
(数组中的项目数)
答案 4 :(得分:-1)
memset()
调用将数组的所有元素清零。 (字符串处理函数通常查找0
(等于'\0'
))
但这并不意味着你的数组现在有0长度。
NELEMENTS()
只返回该数组的已分配内存。
您应该使用一个功能来实现您想要达到的目标:
int nElements(const char* x){
int i=-1;
while(x[++i]!=0);
return i;
}
(未经测试)