回答
将数组长度传递给函数后无需额外努力就无法找到数组的长度。你需要:
- 使用的容器存储的大小,如
vector
(推荐)。 - 传递大小。这可能需要对现有代码进行最少的修改,并且是最快的修复。
- 使用标记值,如C字符串做。这使得查找数组的长度为线性时间操作,并且如果您忘记了标记值,您的程序可能会崩溃。这是在大多数情况下最糟糕的方式。
- 使用模板在传递数组时减去数组的大小。你可以在这里读到它:How does this Array Size Template Work?
如果你想知道,大多数人感到遗憾的是C字符串以这种方式工作。
因此他们发明了B字符串。 –
@MooingDuck链接请:)谷歌是关于这个问题的妈妈 –
Apperently的正确名称为[BSTR(http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(V = vs.85 )的.aspx)(讨厌的人比C字符串) –
当你通过一个数组有不是一个简单的方法来确定函数内的大小。
您可以传递数组大小作为一个参数 或 使用的std ::矢量<的std :: string>
如果你感觉特别冒险可以使用some advanced template techniques
简而言之,它看起来像
template <typename T, size_t N>
void YourFunction(T (&array)[N])
{
size_t myarraysize = N;
}
是的,这就是我目前正在做什么,但我想删除多余的paramater。哦,还有 – bubbles
还有一个std :: array
@bubbles'int main(argc,char ** argv)'。如果它很简单,主要做法会有所不同。 –
如果你的意思是所有字符串添加到集合中的时间有多长。
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
补充:
是那目前在做什么IM,但我想删除多余的 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 *数组[] = { “一”, “二”,(字符*)0};
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
从指针获取数组大小是不可能的。你可以用NULL指针终止数组。这样你的函数可以搜索NULL指针来知道大小,或者干脆停止处理输入,一旦它达到NULL ...
C在你背后做了一些诡计。
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
这两个是相同的:
6.3.2.1.3:除了当它是sizeof运算符的操作数或一元&操作者, 或是用于初始化一个字符串文字一个数组,具有类型为''的类型为 ''的数组的表达式被转换为类型为''的指针的类型为'' 的表达式,该表达式指向数组对象的初始元素并且不是左值。如果 数组对象具有寄存器存储类,则行为是未定义的。
其结果是,不知道,内部foo()
或bar()
,如果你 调用阵列,阵列的一部分,或一个指向单个 整数:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
有些人喜欢写自己的功能,如:void foo(int *array)
只是提醒自己,他们并没有真正传递了阵列, 而是指向一个整数的指针,可能有或没有更多 附近的其他地方。有些人喜欢编写他们的功能 ,比如:,以便更好地提醒自己 函数期望传递给它。不管你喜欢这样做,如果你想知道你的 阵列多久哪种方式
,你有几种选择:
- 通行证沿长度paramenter了。 (Think
int main(int argc, char *argv
))。 - 设计你的数组,使得每个元素不是
NULL
,除了最后一个 元素。 (想想char *s="almost a string";
或execve(2)
。) - 设计你的函数,这样它需要一些 参数的其他描述符。 (认为
printf("%s%i", "hello", 10);
- 字符串描述 其他参数。printf(3)
使用stdarg(3)
参数处理,但 它可能很容易是一个数组。)
琐事:'argv'确实指向了1和2。 – u0b34a0f6ae
使用新的C++ 11的std ::阵列
http://www.cplusplus.com/reference/stl/array/
标准数组大小的方法你想找的
- 1. 如何查找char数组的长度?
- 2. C++如何使用find函数查找char数组中的char?
- 3. c,查找指针数组的长度
- 4. 如何查找数组类的长度?
- 5. 在mongodb中查找数组的长度
- 6. C中的char数组如何找到有效输入的实际长度?
- 7. 如何在ActionScript 3.0中查找关联数组的长度?
- 8. 如何在char数组之前查找char数组中的空格?
- 9. 如何在unix shell中查找数组长度?
- 10. sizeof char /数组长度C中的内存分配,
- 11. C Char阵列Userinput检查长度
- 12. 如何找出NSData数组的长度?
- 13. 如何找出数组的长度?
- 14. 如何在C中获取未知长度的char *?
- 15. 函数在cpp中查找2d字符串数组的长度?
- 16. 查找C#中的MP3长度
- 17. char数组和字符串长度
- 18. C编程查找长度为2的二维数组
- 19. 数组长度
- 20. 如何查找文字数组的长度?
- 21. 如何查找数组列表的长度?
- 22. 如何查找手柄模板内的数组长度?
- 23. 如何查找字符串数组的长度?
- 24. 如何初始化一个可变长度的unsigned char数组?
- 25. 长度 '的char * numberlist []' C和C++
- 26. 在C编程中查找两个长度不同的数组的总和
- 27. 如何找到对象数组的长度在MongoDB中
- 28. 在jquery中查找数组的长度(大小)
- 29. 如何在JSP中查找整数的长度?
- 30. 在不使用长度属性的情况下查找数组的长度
焦炭星级==字符指针 –
顺便说一句,使用'I'代替'i'可能有助于避免“这是一个合理的问题”启发式(除了让英语母语人士更容易阅读这个问题)。 – sarnold