C 获取长度未知的字符串数组的长度
我有这个功能:C 获取长度未知的字符串数组的长度,c,pointers,arrays,C,Pointers,Arrays,我有这个功能: int setIncludes(char *includes[]); 我不知道包含的值需要多少。可能需要包括[5],也可能需要包括[500]。那么,我可以使用什么函数来获取包含的长度呢?无论哪种方法,您都必须知道大小。一种方法是将大小作为第二个参数传递。另一种方法是与调用者达成一致,调用者应该在传递的指针数组中包含一个空指针作为最后一个元素。没有。这是因为数组在传递给函数时会衰减为指向第一个元素的指针 您必须自己传递长度,或者使用数组本身中的某些内容来指示大小 首先,“传递长
int setIncludes(char *includes[]);
我不知道
包含的值需要多少。可能需要包括[5]
,也可能需要包括[500]
。那么,我可以使用什么函数来获取包含的长度呢?无论哪种方法,您都必须知道大小。一种方法是将大小作为第二个参数传递。另一种方法是与调用者达成一致,调用者应该在传递的指针数组中包含一个空指针作为最后一个元素。没有。这是因为数组在传递给函数时会衰减为指向第一个元素的指针
您必须自己传递长度,或者使用数组本身中的某些内容来指示大小
首先,“传递长度”选项。使用以下方法调用函数:
int setIncludes (char *includes[], size_t count) {
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax."};
setIncludes (arr, sizeof (arr) / sizeof (*arr));
setIncludes (arr, 2); // if you don't want to process them all.
sentinel方法在末尾使用一个特殊值来表示不再有元素(类似于Cchar
数组末尾的\0
来表示字符串),类似如下:
int setIncludes (char *includes[]) {
size_t count = 0;
while (includes[count] != NULL) count++;
// Length is count.
}
:
char *arr[] = {"Hello,", "my", "name", "is", "Pax.", NULL};
setIncludes (arr);
我见过的另一种方法(主要用于整数数组)是使用第一项作为长度(类似于Rexx stem变量):
您有两个选择:
可以包含第二个参数,类似于:
int main(int argc,char**argv)
。。。或者,您可以双空终止列表:
char*items[]={“一”、“二”、“三”、空}
在C语言中,无法简单地确定这样一个任意数组的大小。它需要的运行时信息不是以标准方式提供的
支持这一点的最佳方法是将函数中数组的长度作为另一个参数 虽然这是一个非常古老的线程,但事实上,您可以使用Glib在C中确定任意字符串数组的长度。请参阅以下文档:
如果提供,它必须是以null结尾的字符串数组。那么strlen()函数呢
char *text= "Hello Word";
int n= strlen(text);
OR
int n= (int)strlen(text);
假设你指的是第一个,@Mohit,有点像。sizeof
技巧将始终获取数组的长度(假设它尚未衰减为指针)。灵活性在于您不局限于传递该值。如果你有一个1000大小的数组,但里面只有20个有用的值,你可以传递20作为大小。为什么你要传递一个int
数组给一个需要char*
数组的函数?@caf,这是一个很好的观点,我只能说“我是个白痴!”:-)我不知道为什么我认为它们是整数数组,尽管我可能同时在研究两个不同的问题。现在已修复。有趣的是,对于main(int argc,char*argv[])
的特殊情况,C标准要求调用方传递正确的计数,并在argv[argc]
处包含空指针。皮带和吊带,没错,但它有优点。
char *text= "Hello Word";
int n= strlen(text);
OR
int n= (int)strlen(text);