试图在C中围绕字符串大小包裹我的头

Ash*_*Ash 1 c pointers sizeof

我和一个朋友正在为大学做一个C编程单元.

我们知道在C中本身没有"字符串",相反,字符串是由字符数组定义的.真棒!

所以当处理"字符串"时,很明显正确理解数组和指针很重要.

我们在很好地理解指针声明时,何时何时不取消引用指针,并且使用了许多printf来测试我们的实验.一切都很成功.

但是,当我们使用它时:

char *myvar = "";
myvar = "dhjfejfdhdkjfhdjkfhdjkfhdjfhdfhdjhdsjfkdhjdfhddskjdkljdklc";
printf("Size is %d\n", sizeof(myvar));
Run Code Online (Sandbox Code Playgroud)

它吐了出来Size is 8!

为什么8?显然'myvar'消耗了超过8个字节(或者是它)?

(我应该清楚并指出我非常清楚'strlen'.这不是获取字符串长度的练习.这是为了理解为什么sizeof为变量myvar返回8个字节.)

Abi*_*usX 8

8是指针的大小.myvar是一个指向char的指针(因此是char*),在64位系统指针中是64位= 8字节

要获取以null结尾的字符串的大小,请使用以下代码:

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

int main()
{
char *x="hello there";
printf("%d\n",strlen(x));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 他不需要分配空间.但他应该使用"const char*",因为字符串文字通常存储在内存的只读部分.但是,分配内存并不需要过于复杂. (4认同)
  • 一个有趣的注意事项是使用sizeof("abcd")将返回5.它返回实际的字节数,包括字符串所需的NULL.sizeof("abcd")和strlen("abcd"+1)是等价的. (2认同)