我有自己的函数获取数组长度的问题。 代码:
#include <stdio.h>
int main() {
int a[] = {5,4,1,2,1}; //len -> 6!! FAIL! WHY?
//int a[] = {5,4,1,2}; //len -> 4 OK!
int len = 0;
int *p = a;
while(*p != '\0'){
printf("%d\n", *p);
len++;
*p++;
}
printf("len: %d\n", len);
return 0;
}
输出上面的代码:
5
4
1
2
1
32767
len: 6
但是这个数组int a [] = {5,4,1,2}; - 产生len = 4 - 确定。
为什么会这样?
答案 0 :(得分:2)
它失败了,因为数组末尾没有0
。它不是自动添加的,您需要明确地添加它。因此,您在数组外部访问,这会导致未定义的行为。你的一个测试似乎工作的事实纯粹是运气,你不能依赖它。
int a[] = {5, 4, 1, 2, 1, 0};
C自动添加空终止符的唯一时间是使用字符串文字初始化char
数组时,例如
char c[] = "abcde";