Я знаю, что для получения размера можно использовать функцию 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;

}

Как вы, ребята, можете видеть, если пользователь решает ввести только слово, скажем, «Бобби Фу», тогда мне нужно будет число 9, включая пробел, но функция sizeof получает только длину, равную размеру объявленного массива, который равен 50 ..>.> ..

c
2
Belphegor 5 Окт 2014 в 08:13

2 ответа

Лучший ответ

Используйте 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;
}
0
ani627 6 Окт 2014 в 11:58

В: Можно ли получить количество элементов, хранящихся в данный момент в массиве на C?

  1. Краткий ответ: Нет. Вам нужно отслеживать эту информацию самостоятельно.

  2. Вы случайно используете fgets () с массивом символов. Поскольку в этом случае вы получаете "строку" C, вы можете использовать функцию C strlen ().

  3. Стоит отметить, что fgets () также вернет новую строку, поэтому ваша строка может быть на один (Mac, Linux) или два (DOS / Windows) символа длиннее, чем вы ожидаете.

PS :

Вот еще немного о строках C, включая концепцию «нулевого завершения» (если вы еще не знакомы с ними):

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

2
Jabberwocky 6 Окт 2014 в 12:15