gpt4 book ai didi

c - 为什么 "extern char name[]"中缺少数组索引不会影响 strlen(name) 但会导致 sizeof(name) 出错?

转载 作者:太空狗 更新时间:2023-10-29 15:22:17 34 4
gpt4 key购买 nike

现在,据我了解,name[] 声明中的 extern 告诉编译器它的定义在其他地方(在我的程序中,我定义了它低于我使用它的部分)。但是为什么 strlen()sizeof 会有不同的结果?strlen() 有效很好,但是对于 sizeof() 我得到了错误:

“sizeof”对不完整类型“char[]”的无效应用 |

这是我的程序:

#include<stdio.h>
#include<string.h>

extern char name[];

int main()
{
printf("%d,%d",strlen(name),sizeof(name));
}

char name[]="Bryan";
//char name[6]="Bryan"; //Neither of these make sizeof work

我试图根据我对extern关键字的理解进行推理,但我遇到了瓶颈。所以请给出你的答案。

最佳答案

因为sizeof不知道sizeof所在的变量的内容,但是strlen不关心编译-time 大小,它只是从字符串的开头遍历,直到找到标记字符串结尾的 NUL 字符。

例如:

 char name[40] = "Bryan";

...

size_t size = sizeof(name);
size_t len = strlen(name)

strcat(name, " Adams");

printf("%s: len=%zd, size=%zd, strlen(name)=%zd\n",
name, len, size, strlen(name));

这将显示

Bryan Adams: len=5, size=40, strlen(name)=11

关于c - 为什么 "extern char name[]"中缺少数组索引不会影响 strlen(name) 但会导致 sizeof(name) 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500454/

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