是否有可能在C中获取当前存储在数组中的元素数量?

时间:2014-10-05 04:13:15

标签: c

我知道可以使用sizeof函数来获取大小,但它不能获得数组长度的真实计数。如果我设置了一个int 50的数组并且我只存储了10个数字,我希望得到10作为元素的数量,但当然不会发生。我知道这绝对是一个微不足道的问题,但请耐心等待,如果有可能,请帮助我。

到目前为止,我的代码占用了整个句子并将其存储在数组中。

#include <stdio.h>
#include <string.h>

int main()
{
    int i=0;
    char array[50]={0};
    fgets(array, 50, stdin);
    int len = sizeof(array);  // it doesn't work :((((((
    for(i=0; i<len; i++)
    {
        printf("%c\n", array[i]);
    }
    return 0;

}

正如大家们所看到的那样,如果用户决定只输入一个单词“Bobby Foo”那么我会想要包括空格的len数字9,但sizeof函数只获得数组大小的长度声明为50 ..&gt;。&gt; ..

2 个答案:

答案 0 :(得分:2)

问:是否可以在C中获取当前存储在数组中的元素数量?

  1. 简答:不。您需要自己跟踪此信息。

  2. 您碰巧将fgets()与字符数组一起使用。因为在这种情况下你得到一个C“字符串”,你可以使用C函数strlen()

  3. 值得注意的是fgets()也会返回一个换行符 - 所以你的字符串可能是一个(Mac,Linux)或两个(DOS / Windows)字符比你期望的更长。

  4. PS:

    以下是关于C字符串的更多信息,包括“null终止”的概念(如果您还不熟悉它们):

    http://www.cprogramming.com/tutorial/c/lesson9.html

答案 1 :(得分:0)

使用strlen获取array的大小。您需要包含string.h

sizeof()不是一个运算符的函数。当sizeof应用于静态数组的名称(未通过malloc分配)时,结果是整个数组的大小(以字节为单位)。

如果您使用fgets,则需要从字符串中删除\n。一个简单的方法是:

array[strlen(array) - 1] = '\0';

一个简单的例子:

#include <stdio.h>
#include <string.h>
#include <stddef.h>

int main()
{
    int i=0;
    char array[50]={0};
    char *p;
    fgets(array, 50, stdin);
    //Remove `\n` from the array.
    if ((p=strchr(array, '\n')) != NULL)
        *p = '\0';
    size_t len = strlen(array);  // Use strlen to find the length of string
    for(i=0; i<len; i++)
    {
        printf("%c\n", array[i]);
    }
    return 0;
}