查找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 …