我知道可以使用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; ..
答案 0 :(得分:2)
问:是否可以在C中获取当前存储在数组中的元素数量?
简答:不。您需要自己跟踪此信息。
值得注意的是fgets()也会返回一个换行符 - 所以你的字符串可能是一个(Mac,Linux)或两个(DOS / Windows)字符比你期望的更长。
PS:
以下是关于C字符串的更多信息,包括“null终止”的概念(如果您还不熟悉它们):
答案 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;
}