Ulr*_*ira 2 c arrays pointers char
这可能吗?
size_t calculate(char *s)
{
// I would like to return 64
}
int main()
{
char s[64];
printf("%d", calculate(s));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数来计算声明的char数组的大小main().
calculate()仅使用指针参数s,您的函数无法计算数组的大小.数组的大小不是在指针中编码,也不是从指针访问.如果它被设计为采用以null结尾的字符串作为参数,它可以确定该字符串的长度; strlen()当然,那是什么呢.但是如果它想知道它可以安全地复制到数组中的信息量,就必须告诉数组有多大,或者假设有足够的空间.
正如其他人所指出的那样,sizeof()运算符可以在数组定义可见的函数中使用,以获得数组的大小.但是在无法看到数组定义的函数中,您无法有效地应用sizeof()运算符.如果数组是一个全局变量,其定义(非声明)在范围(可见)中calculate()写入 - 而不是函数的参数 - 则calculate()可以指示大小.
这就是许多C函数占用指针和长度的原因.缺乏信息是为什么C有些人容易误用它并产生"缓冲区溢出"错误,其中代码试图将一加仑信息装入品脱罐中.
在静态声明时,char[]您可以使用运算符sizeof,在这种情况下将返回64.
printf("%d", sizeof(s));
Run Code Online (Sandbox Code Playgroud)
在动态声明时char*,无法获得已分配内存的大小.
动态数组是通过malloc和朋友获得的.所有其他的都是静态声明的,你可以使用sizeof它们,只要你在与声明数组相同的范围内使用它(例如,在你的情况下,相同的函数).