哪一本书是你读? sizeof
是一个运算符,它告诉你一个类型(或者你的情况,一个对象的类型)占用了多少个字节。 strlen
是一个函数,告诉你第一个字符所在的位置,它表示字符串的结尾。
char foo[32] = "hello";
printf("sizeof foo: %zu\n", sizeof foo);
printf("strlen(foo): %zu\n", strlen(foo));
sizeof foo
是32,无论你在foo
存储的东西,但你可以看到strlen(foo)
其实5
,在那里你会期待'\0'
(NUL终止子)去。
就动态分配而言,您可以期望将返回值malloc
存储在指针中。
char *foo = malloc(32);
strcpy(foo, "hello");
printf("sizeof foo: %zu\n", sizeof foo);
printf("sizeof (char *): %zu\n", sizeof (char *));
printf("strlen(foo): %zu\n", strlen(foo));
在这种情况下,sizeof foo
是sizeof (char *)
,因为它给你的字节数在char *
(字符指针)。这与strlen
函数非常不同,因为指向char的指针的大小在运行时是恒定的。
sizeof (char)
是总是 1.这是C标准所要求的。如果你发现不是这样的实现,那么它不是C实现。
也许你的书可能会解释这一点,这就是为什么我问......但有很多质量差的书。请回答这个问题!
请看看这个--http://stackoverflow.com/questions/8590332/difference-between-sizeof-and-strlen-in-c – Bill 2013-05-14 03:43:00
@Bill不幸的是我不知道我在问什么。 – 2013-05-14 03:46:28