我想知道为什么这种确定数组大小的方法给出答案"我想到了。
根据我的解释,考虑到大小中包含的空指针,test2()
的输出是正确的。但我不知道使用test1(char *s)
时会发生什么。
#include <stdio.h>
void test1(char *s);
void test2();
int main() {
char s[] = "aaa";
test1(s);
test2();
return 0;
}
void test1(char *s) {
printf("cstring: %s\n", s);
int size = sizeof(s)/sizeof(char);
printf("size: %d\n",size);
int test[] = {1,2,3,4,5};
size = sizeof(test)/sizeof(int);
printf("size: %d\n",size);
}
void test2() {
printf("@test:\n");
char s[] = "aaa";
int size = sizeof(s)/sizeof(char);
printf("size: %d\n", size);
int i[] = {1,2,3,4,5};
size = sizeof(i)/sizeof(int);
printf("size: %d\n", size);
}
cstring: aaa
size: 8
size: 5
@test:
size: 4
size: 5
[Finished in 0.0s]
答案 0 :(得分:2)
在你的函数test1中,你只有一个char指针(char*
),而不是一个数组。因此,sizeof(s)
将返回指针的大小:如果构建为32位,则可以为4;如果构建为64位,则为8。
如果您确定要使用以空字符结尾的字符串,请使用strlen()
代替其他人,在您的函数中添加size_t size
参数。