我有一些代码如下:
int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);
这里我想在c中找到数组a
的长度?
怎么办呢?
答案 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 将保存数组的使用长度,而不是整个初始化数组。我知道这是一篇较晚的文章,但它可能会对某人有所帮助。