我有一个输入功能,如:
int func(char* s[])
{
// return number of rows in the character array s
}
其中char数组s是随机提供的,例如:{“ sdadd”,“ dsdsd”,“ dsffsf”,“ ffsffsf”}。
对于上面的示例,此处的输出应为4。
传递字符串数组需要更多信息...
这类似于您在致电时会找到的输入int main(int argc, char *argv[])
。唯一的例外是,当main()
被调用时,它将读取命令行并以argc形式提供计数信息,以确定中的参数数量argv[]
。这就是为什么char *argv[]
可以传递参数的原因。
您有相同的要求。就是说,当传递诸如的参数时char *s[]
,即,您还必须以某种方式提供一个值,该值可以告诉您有func()
多少个字符串。如果不告知C,C无法知道该变量中的字符串数。这是因为数组引用(char * s [];)衰减为指向char(char * s;)的指针,该指针指向该数组的第一个元素,即没有数组大小信息。
所以,回答你的问题是:,与给出的信息,func()
无法确定串的数量s
。
一个重要的区别:
大小CAN字符数组来确定,如
char *s[]={"this","is","an","array"}; // the assignment of values in {...}
//make this an array of strings.
但是仅当s
在函数的相同范围内声明试图确定元素数时才可以。如果满足该条件,则使用:
int size = sizeof(s)/sizeof(s[0]); //only works for char arrays, not char *
//and only when declared and defined in scope of the call
在作用域中,在此上下文中,仅意味着char * s [] ...是用全局可见性定义的,或在计算元素数量的函数中定义的。如果作为参数传递,如上定义的char * s [];将被简单地视为char * s,并且无法确定参数的数量。
用于检索字符串数组中的字符串计数的其他选项包括:
1)修改输入数组,以使最后一个字符串中的某些内容是唯一的,例如“%”或“ \ 0”。这将允许您使用标准C字符串函数测试字符串。
2)在提供字符串数量的函数中包含一个参数。(例如,类似于main(...)
或printf(...)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句