int main()
{
struct
{
char *name_pointer;
char all[13];
int foo;
} record;
printf("%d\n",sizeof(record.all));
printf("%d\n",sizeof(record.foo));
printf("%d\n",sizeof(record));
return 0;
}
我想要结构中可变的指针“ * name_pointer”的大小。...
要获取指针的大小,请使用
printf("%d\n", (int) sizeof(record.name_pointer));
您可能会得到2、4、6、8等
要获取指针(char
)所指向的数据的大小,请使用
printf("%d\n", (int) sizeof(*record.name_pointer));
您应该得到1。
要获得指针指向的字符串的字符串长度,请假设record.name_pointer
指向合法数据,请使用
printf("%d\n", (int) strlen(record.name_pointer));
BTW正如@alk所说的,以及为什么上面的(int)
强制转换,适合与sizeof()
一起使用的转换说明符包括'z'前缀。 sizeof()
和strlen()
的结果为size_t
类型。尽管size_t
和int
通常相同,但是在许多系统中,它们的大小不同。并且由于sizeof()是“无符号整数类型”(C11 6.5.3.4),所以我建议
printf("%zu\n", sizeof(...
指针变量将始终(32位系统体系结构)具有大小4。如果您具有64位系统架构,则为8。
我相信使用sizeof的数据类型而不是本机数据类型的变量是一个好主意。因此使用:
sizeof(char *)
使用以下代码:
printf("%d\n", (int) sizeof(record->name_pointer)/4);