Tho*_*hom 4 c sizeof extern strlen
现在,根据我的理解,extern在声明中name[]告诉编译器它的定义是在其他地方(在我的程序中,我已经在我使用它的部分下面定义了它.)但是为什么然后有不同的后果strlen()和sizeof?strlen()工作正常,但sizeof()我得到错误:
invalid application of 'sizeof' to incomplete type '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
Run Code Online (Sandbox Code Playgroud)
我试图根据我对extern关键字的理解来推断它,但我遇到了瓶颈.所以请给出你的答案.
因为sizeof不知道变量的位置sizeof是什么,但strlen不关心编译时的大小,它只是从字符串的开头走,直到找到标记字符串结尾的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));
Run Code Online (Sandbox Code Playgroud)
这将显示
Bryan Adams: len=5, size=40, strlen(name)=11
Run Code Online (Sandbox Code Playgroud)