gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:50:32 25 4
gpt4 key购买 nike

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

#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 。它不会自动添加,您需要明确添加。因此,您在数组外部进行了访问,从而导致未定义的行为。您的一项测试似乎有效这一事实纯粹是运气,您不能依赖它。

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

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

char c[] = "abcde";

关于c lang - 通过指针不同的数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40007030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com