c lang - 指针的不同数组长度

时间:2016-10-12 19:42:21

标签: c arrays

我有自己的函数获取数组长度的问题。 代码:

#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 - 确定。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

它失败了,因为数组末尾没有0。它不是自动添加的,您需要明确地添加它。因此,您在数组外部访问,这会导致未定义的行为。你的一个测试似乎工作的事实纯粹是运气,你不能依赖它。

int a[] = {5, 4, 1, 2, 1, 0};

C自动添加空终止符的唯一时间是使用字符串文字初始化char数组时,例如

char c[] = "abcde";
相关问题