查找char数组的长度

我有一些代码如下:

int i=0; char a[7]={0x00,0xdc,0x01,0x04}; int len=0; len = sizeof(a); printf("The Length is : %d", len); 

在这里,我想在c中找到数组a的长度? 如何才能做到这一点?

按照惯例,C字符串是’空终止’。 这意味着最后有一个额外的字节,其值为零( 0x00 )。 任何使用字符串(如printf )执行某些操作的printf都会认为字符串在找到null时结束。 这也意味着如果你的字符串不是以null结尾,它会继续运行,直到它找到一个空字符,这可以产生一些有趣的结果!

由于数组中的第一项是0x00,因此它将被视为长度为零(无字符)。

如果您将字符串定义为:

 char a[7]={0xdc,0x01,0x04,0x00}; 

例如以null结尾

然后你可以使用strlen来测量存储在数组中的字符串的长度。

sizeof测量类型的大小。 这不是你想要的。 还要记住,数组中的字符串可能比数组的大小短。

如果你期望输出为4 ,那么试试这个:

char a [] = {0x00,0xdc,0x01,0x04};

sizeof以字节为单位返回变量类型的大小。 所以在你的情况下,它返回你的char[7]的大小,即7 * sizeof(char) 。 由于sizeof(char) = 1 ,结果为7。

将此扩展为另一个示例:

 int intArr[5]; printf("sizeof(intArr)=%u", sizeof(intArr)); 

会得到5 * sizeof(int) ,所以你得到的结果是“20”(至少在普通的32位平台上。在其他的上, sizeof(int)可能会有所不同)

要回到你的问题:

看起来,您想知道的是数组中包含的字符串的长度,而不是总数组大小。

根据定义,C-Strings必须以尾部’\ 0’(0-Byte)结束。 因此,要获得数组中包含的字符串的适当长度,必须首先终止字符串,以便可以判断它何时完成。 否则现在就有了解的方法。

所有标准函数都基于此定义构建,因此如果调用strlen来检索str ing len gth,它将遍历给定数组,直到找到第一个0字节,在您的情况下,它将是第一个元素。

您可能需要知道的另一件事只是因为您没有使用值填充char[7]的其余元素,它们实际上确实包含随机未定义的值。

希望有所帮助。

你可以试试这个:

  char tab[7]={'a','b','t','u','a','y','t'}; printf("%d\n",sizeof(tab)/sizeof(tab[0])); 

您可以为任何类型的数组执行len = sizeof(a)/sizeof(*a) 。 但是,你把它初始化为a[7] = {...}意味着它的长度是7 …