我声明了以下数组:
char* array [2] = { "One", "Two"};
我将此数组传递给函数。如何在函数中找到此数组的长度?
答案 0 :(得分:17)
在将数组传递给函数后无法轻松找到数组的长度。你需要:
vector
(推荐)。1 如果您想知道,大多数人都对C字符串以这种方式工作的事实感到遗憾。
答案 1 :(得分:7)
传递数组时, NOT 是一种确定函数大小的简便方法。
您可以将数组大小作为参数传递 要么 使用 std :: vector< std :: string>
如果您特别喜欢冒险,可以使用some advanced template techniques
简而言之,它看起来像
template <typename T, size_t N>
void YourFunction( T (&array)[N] )
{
size_t myarraysize = N;
}
答案 2 :(得分:2)
C正在背后做一些诡计。
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
这两者都是相同的:
6.3.2.1.3:除非是sizeof运算符或一元&amp;运算符的操作数。运营商, 或者是用于初始化数组的字符串文字,一个具有类型的表达式 ''数组''转换为类型''指向类型''的表达式 指向数组对象的初始元素,而不是左值。如果 数组对象具有寄存器存储类,行为未定义。
因此,如果您是foo()
或bar()
,则不知道
使用数组,数组的部分或指向单个的指针调用
整数:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
有些人喜欢写下自己的功能:void foo(int *array)
只是为了提醒自己,他们并没有真正通过数组,
而是一个指向整数的指针,可能有也可能没有
附近其他地方的整数。有些人喜欢写他们的功能
喜欢:void foo(int array[])
,更好地提醒自己是什么
函数期望传递给它。
无论你喜欢哪种方式,如果你想知道多长时间 你的阵列是,你有几个选择:
int main(int argc, char
*argv
))。NULL
,除了最后一个
元件。 (想一想char *s="almost a string";
或execve(2)
。)printf("%s%i", "hello", 10);
- 字符串描述
其他论点。 printf(3)
使用stdarg(3)
参数处理,但是
它可以很容易成为一个数组。)答案 3 :(得分:0)
如果你的意思是加入所有字符串多长时间。
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
<强>加了:强>
是的,这就是我目前在做什么,但我想删除那个额外的 paramater。哦,好吧 -
可能会对此做出错误的响应,但是你总是可以使用第一个指针来存储大小,只要你不尊重它或将它误认为实际上是指针。
char* array [] = { (char*)2,"One", "Two"};
long size=(long)array[0];
for(int i=1; i<= size;++i)
printf("%s",array[i]);
或者你可以NULL终止你的数组
char * array [] = {“One”,“Two”,(char *)0};
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
答案 4 :(得分:0)
无法从指针获取数组大小。您可以使用NULL指针终止数组。这样你的函数可以搜索NULL指针来知道大小,或者只是在它命中NULL时停止处理输入......
答案 5 :(得分:0)
使用新的C ++ 11 std :: array
http://www.cplusplus.com/reference/stl/array/
标准数组具有您要查找的大小方法