gpt4 book ai didi

c - 当 'sizeof' 应用于字符串时,为什么它会返回其大小(如 strlen)?

转载 作者:行者123 更新时间:2023-12-04 10:31:26 24 4
gpt4 key购买 nike

如果我有一个字符串:

char s1[]="hello, how are you?";
printf("%d\n",sizeof(s1));

它打印出准确、正确的字符数,20。但是如果我有一个由指针初始化的字符串:

char *s2;
s2=(char*)malloc(sizeof(char));
strcpy(s2,s1);
printf("%d\n",sizeof(s2));

它打印指针的大小,这取决于机器(在我的机器上,8)。那么为什么 s2 是 8 个字节,而 s1 是 20 个字节,因为它们是相同的字符串?

最佳答案

它们不是同一个字符串,甚至不是同一个类型。 char s2[] 是一个数组,它的大小等于其元素大小的总和。 char *s2 是一个指针,它有一个指针的大小。

sizeof() 是(在 C89 中)一个编译时运算符,它必须在编译时知道它的参数的大小。由于指针 可以来自任何地方,sizeof() 无法知道分配内存的大小,但是数组 总是被赋予一个编译时的大小(C99 的 VLA 除外),然后 sizeof() 可以返回该内存的大小。

关于c - 当 'sizeof' 应用于字符串时,为什么它会返回其大小(如 strlen)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953327/

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