查找char数组的长度

时间:2011-05-27 09:23:04

标签: c arrays

我有一些代码如下:

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

这里我想在c中找到数组a的长度? 怎么办呢?

6 个答案:

答案 0 :(得分:31)

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

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

如果您将字符串定义为:

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

e.g。空终止

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

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

答案 1 :(得分:3)

如果您希望4作为输出,请尝试以下操作:

  

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

答案 2 :(得分:3)

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]的其余元素,它们实际上确实包含随机未定义的值。

希望有所帮助。

答案 3 :(得分:1)

你可以试试这个:

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

如果有人正在寻找快速解决方案,请按以下步骤操作。

while (array[i] != '\0') i++;

变量 i 将保存数组的使用长度,而不是整个初始化数组。我知道这是一篇较晚的文章,但它可能会对某人有所帮助。