如何在C中的调用函数中计算静态分配的字符串的大小?
How to calculate the size of the statically allocated string in the calling function in C?
如何获取函数check_size中的值200
?
#include <stdio.h>
#include <string.h>
int check_size(char *ptr)
{
//if (sizeof(ptr) == 200)
//{
// ...
//}
printf("%ld \n", sizeof(ptr));
printf("%ld \n", sizeof(*ptr));
printf("%ld \n", strlen(ptr));
return 1;
}
int main()
{
char ptr[200]="[=10=]";
int s = check_size(ptr);
return 0;
}
当数组用作函数参数时,它被转换为指向其第一个元素的指针。因此,函数无法获取作为参数传递的数组的大小。
关于您的尝试:
printf("%ld \n", sizeof(ptr));
由于 ptr
是一个 char *
这将为您提供该指针的大小(通常为 8)。
printf("%ld \n", sizeof(*ptr));
这将为您提供 ptr
指向的大小,特别是定义为 1 的 char
。
printf("%ld \n", strlen(ptr));
假设 ptr
指向一个以空字符结尾的字符串,这将为您提供字符串的长度。
数组大小需要作为单独的参数传入,函数才能知道。表达式 sizeof(ptr)
如果在 main
中使用,将为您提供数组的大小(以字节为单位)。
需要澄清的事情:被调用的函数没有 "array size" 的概念。它所给出的只是一个指向一个字节的指针。
现在,如果您要对数组进行特定的初始化,例如 199 个字符长度的字符串,您可以使用 strlen()
来完成。或者您可以传入数组大小,尽管这很简单。
但总的来说,这里无法完全按照您的要求进行操作。
How to get the value 200 in the function check_size?
而不是有一个函数接受一个 char*
,有一个函数接受一个指向 char 数组 200 的指针。
#include <stdio.h>
#include <string.h>
int check_size(char (*ptr)[200]) {
printf("%zu \n", sizeof(ptr));
printf("%zu \n", sizeof(*ptr));
printf("%zu \n", strlen(*ptr));
return 1;
}
int main() {
char ptr[200] = "[=10=]";
check_size(&ptr);
return 0;
}
输出
8
200
0
GTG
How to get the value 200
in the function check_size
? How to calculate the size of the statically allocated string in the calling function in C?
由于 ptr
的大小在编译时已知,并且您还应该在任何源代码中尽可能少地硬编码整数文字,因此只需使用宏常量来保存元素的数量。有了它,您可以轻松计算函数 check_size()
:
中数组的大小
#include <stdio.h>
#include <string.h>
#define length 200 // macro constant `length`.
int check_size(char *ptr)
{
printf("%zu \n", sizeof(*ptr)); // size of `char`
printf("%zu \n", sizeof(*ptr) * length); // size of the array.
printf("%zu \n", sizeof(ptr)); // size of the pointer to `char`.
printf("%zu \n", strlen(ptr)); // length of the string.
return 1;
}
int main()
{
char ptr[length] = "[=10=]"; // macros can be used here.
check_size(ptr);
return 0;
}
输出:
1
200
8
0
如何获取函数check_size中的值200
?
#include <stdio.h>
#include <string.h>
int check_size(char *ptr)
{
//if (sizeof(ptr) == 200)
//{
// ...
//}
printf("%ld \n", sizeof(ptr));
printf("%ld \n", sizeof(*ptr));
printf("%ld \n", strlen(ptr));
return 1;
}
int main()
{
char ptr[200]="[=10=]";
int s = check_size(ptr);
return 0;
}
当数组用作函数参数时,它被转换为指向其第一个元素的指针。因此,函数无法获取作为参数传递的数组的大小。
关于您的尝试:
printf("%ld \n", sizeof(ptr));
由于 ptr
是一个 char *
这将为您提供该指针的大小(通常为 8)。
printf("%ld \n", sizeof(*ptr));
这将为您提供 ptr
指向的大小,特别是定义为 1 的 char
。
printf("%ld \n", strlen(ptr));
假设 ptr
指向一个以空字符结尾的字符串,这将为您提供字符串的长度。
数组大小需要作为单独的参数传入,函数才能知道。表达式 sizeof(ptr)
如果在 main
中使用,将为您提供数组的大小(以字节为单位)。
需要澄清的事情:被调用的函数没有 "array size" 的概念。它所给出的只是一个指向一个字节的指针。
现在,如果您要对数组进行特定的初始化,例如 199 个字符长度的字符串,您可以使用 strlen()
来完成。或者您可以传入数组大小,尽管这很简单。
但总的来说,这里无法完全按照您的要求进行操作。
How to get the value 200 in the function check_size?
而不是有一个函数接受一个 char*
,有一个函数接受一个指向 char 数组 200 的指针。
#include <stdio.h>
#include <string.h>
int check_size(char (*ptr)[200]) {
printf("%zu \n", sizeof(ptr));
printf("%zu \n", sizeof(*ptr));
printf("%zu \n", strlen(*ptr));
return 1;
}
int main() {
char ptr[200] = "[=10=]";
check_size(&ptr);
return 0;
}
输出
8
200
0
GTG
How to get the value
200
in the functioncheck_size
? How to calculate the size of the statically allocated string in the calling function in C?
由于 ptr
的大小在编译时已知,并且您还应该在任何源代码中尽可能少地硬编码整数文字,因此只需使用宏常量来保存元素的数量。有了它,您可以轻松计算函数 check_size()
:
#include <stdio.h>
#include <string.h>
#define length 200 // macro constant `length`.
int check_size(char *ptr)
{
printf("%zu \n", sizeof(*ptr)); // size of `char`
printf("%zu \n", sizeof(*ptr) * length); // size of the array.
printf("%zu \n", sizeof(ptr)); // size of the pointer to `char`.
printf("%zu \n", strlen(ptr)); // length of the string.
return 1;
}
int main()
{
char ptr[length] = "[=10=]"; // macros can be used here.
check_size(ptr);
return 0;
}
输出:
1
200
8
0