C中char数组的长度

时间:2014-10-30 10:55:09

标签: c arrays

我有一个这样的数组:

char data[512];

清除我的数组使用:

memset(&data[0], 0, sizeof(data));

我定义了:

#define NELEMS(x)  (sizeof(x) / sizeof(x[0]))

但是当我试图得到我的数组时,它仍然给出了512;

int a = NELEMS(data); 

我想清除我的数组,然后添加一些元素,如何获取数组中的元素数(插入元素)?

5 个答案:

答案 0 :(得分:3)

data是一个512 char变量(1个字节)的数组,因此sizeof(data)是512.这是正确的。阅读有关数据类型的更多信息。

答案 1 :(得分:2)

您似乎只是'清空'数组,而不是删除它。

data始终为sizeof 512,因为这是您初始化它的内容。 “清除”内容不会调整其大小,只有删除并重新创建它才会改变大小。

您可能想要的是

  • 迭代直到找到'null'值(获取元素数量)
  • 重新创建一个新阵列(具有不同的大小) - 不是最佳选择

或者,取决于您要找的内容

  • 设置a = 0;

就目前而言,看起来您希望在下一个可用空间中添加一个值,因此这里的第一个要点应该是您正在寻找的内容。

LINK:

Iterating through an array in C

答案 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;
}

(未经测试)