-1

我正在尝试使用 C 计算数组中元素的数量。我尝试了以下代码。但每次我运行程序时它只会返回 83 。我所说的计算元素数量的意思是我需要知道我们输入的元素数量,而不是数组的大小。

 #include<stdio.h>
#include<stdlib.h>
main(){

int a[100], j = 0, i;

a[0] = '0';
a[1] = '1';
a[2] = '2';
a[3] = '3';
a[4] = '4';
a[5] = '5';

for(i=0; i<100; i++){

       if(a[i] == '\0'){

       }        
        else
            j = j + 1;          
}

printf("%d", j);

system("pause");
}
4

4 回答 4

2

C 中的数组是固定大小的。它们不会扩展。你array有两个条目;写入array[2],array[3]等会调用未定义的行为。换句话说,它是无效代码。

如果您希望能够插入任意数量的元素,则需要使用动态分配的内存,手动跟踪已插入的元素数量,并realloc在需要调整大小时使用。

于 2012-07-21T11:24:38.727 回答
1

由于 OP 修改了他的代码,这里有一个更正确的回复:此代码“偶然”工作,因为您之前没有初始化数组。这只是“运气”,在那里的某个地方出现了值 0。

数组的声明不会将其归零。采用:

memset(a, 0, 100);

为了那个原因。这样,第一个“未覆盖”字节将返回“0”。参考:http ://www.cplusplus.com/reference/clibrary/cstring/memset/

或者,您必须通过添加 a[x] = 0; 手动设置“分隔”;

现在,我知道您特别要求使用“C”解决方案,但如果您想考虑使用 C++ 编译器,我建议您查看 C++ 的 stl。这是一个帮助您入门的链接:http ://www.cplusplus.com/reference/stl/list/

它被初始化为:

list<char>List;
List.push_back(1);
List.push_back(2);
List.push_back('a');

int j = List.size();   //Returns '3'
于 2012-07-21T11:25:49.933 回答
1

改为这样做:

main(){

  int a[100] = {0};
  int j = 0;
  int i = 0;

  // other stuff
于 2012-07-21T16:50:57.790 回答
0

基于新代码的更新:

通常,您需要一种方法来识别数组的末尾以便进行正确的计数。对于字符串,'\0'通常使用。对于其他数据类型,您必须提出自己的值来检查。

对于上面的特定代码示例:

您需要将\0自己插入数组的最后一个位置,以便您的计数起作用。(当你创建一个像“hello”这样的字符串时,它'\0'会自动为你放在字符串的末尾,但如果你逐个字符地创建一个字符串,则不会)。

或者,检查字符'5'以查找当前字符数组的结尾。

break此外,一旦找到最后一个字符,您就应该退出循环,否则您将越过数组的末尾并且很可能会崩溃(同样,如果您不这样做,那是纯粹的运气)。即,类似:

   if(a[i] == '\0'){
      break;
   }

如果你这样做会起作用:

   a[6] = '\0';

前。

由于 C 不检查数组边界,因此使用您当前的代码似乎可以摆脱这种情况,但程序没有崩溃并且可能会在运行之间发生变化,这完全是幸运的。换句话说,这是未定义的行为。

strlen()最后,如果您正在处理字符串,您当然也可以使用。

于 2012-07-21T11:24:25.177 回答