[英]In C how to get number of items in array of pointers to char strings
我想实现以下函数来打印通过指针数组引用的几个char
字符串的内容。 如何在不传递总数作为函数参数的情况下确定有多少指针?
如果它是一个int
类型的数组,那么就可以使用sizeof()
函数,但是假设我的数组中的每个项都是一个指向char
字符串的指针,并且每个字符串可能有不同的长度,我认为我不能使用这种方法。
void printCharArray(char *arr[]){
int length = sizeof(arr) / sizeof(char); /* this does not give correct
number of items in the pointer array */
for (int i=1;i<=length; i++) {
printf("Array item: [%s]",arr[i]);
}
}
没有内置的方法来执行此操作,因为C不会像这样跟踪数组中的元素数量。
你有几个选择:
您不能将数组作为函数参数传递给C.当用作函数参数时,数组名称会衰减为指向其第一个元素的指针,您必须单独指定可用数组元素的数量。
(在函数参数类型的上下文中, T[]
和T*
和T[12]
是相同的,因此您的函数参数也可能是char ** arr
。)
像这样:
void printCharArray(char ** arr, size_t len) { /* ... */ }
int main()
{
char * arr[10] = { "Hello", "World", /* ... */ };
printCharArray(arr, sizeof(arr)/sizeof(*arr));
}
(或者你可以提供一个“第一个”和一个“一个接一个”的指针,这可能更自然一些 。)
如果将最后一个有效元素之后的元素设置为null,则可以执行以下操作:
void printCharArray(char *arr[]){
for (int i=0; arr[i] != NULL; i++) {
printf("Array item: [%s]",arr[i]);
}
}
void printCharArray(char *arr[]) {
int length = sizeof(arr) / sizeof(char*); /* this does not give correct
number of items in the pointer array */
for (int i=0;i<=length; i++) {
printf("Array item: [%s]",arr[i]);
}
}
int main()
{
char * arr[10] = { "Hello", "World", /* ... */ };
printCharArray(arr);
}
首先我将y声明为全局var。 htmTags是一个* char []。 然后在main()
y = 0;
while( htmTags[y] ) {
y++;
}
我没有在数组末尾添加null。 提供数组元素的实际数量
或者这也适用于(y = 0; htmTags [y]; y ++);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.