Zarif Muhtasim Ответов: 3

Каждый раз, когда я запускаю этот код, я получаю 3. Но это должно быть 10. Как это исправить?


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

int main()
{
    int n;
    char* element[] = "Hydrogen" ,"Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", "Neon" };
    n=strlen(element);
    printf("%d",n);
    return 0;
}


Что я уже пробовал:

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

int main()
{
    int n;
    char* element[] = {"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon"};
    n=strlen(element);
    printf("%d",n);
    return 0;
}

Garth J Lancaster

Я подозреваю, что знаю ответ, но для полноты картины вы хотите знать, сколько элементов находится в массиве элементов, для которого 10 было бы правильным, по сравнению с размером (количеством символов) первого элемента

очевидно, что проблема в вашем коде заключается в том, что

n=strlen (элемент);

он делает не совсем то, что вы ожидаете/думаете, что он делает ....

[редактировать]
Я брошу это там, чтобы вы подумали - вы смотрели на функцию sizeof ()?
посмотрите на sizeof(element) и sizeof (element[0])
[/редактировать]

3 Ответов

Рейтинг:
9

sarvesh.upadhyay

Мы не можем использовать strlen для получения количества элементов в массиве.

Я решил для вас и связал, как показано ниже.

длина массива строк[^]


Richard MacCutchan

Если вы знаете ответ, то разместите код здесь, а не на другом сайте.

Рейтинг:
1

CPallini

Размер массива известен во время компиляции. Обычно используется макрос, подобный следующему

#define NELEM(a)  (sizeof(a) / sizeof(a[0]))

Попробуйте, например
#include <stdio.h>

#define NELEM(a)  (sizeof(a) / sizeof(a[0]))

int main()
{
    int n;
    char* element[] = { "Hydrogen" ,"Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", "Neon" };
    n = NELEM(element);
    printf("%d\n",n);
    return 0;
}


Рейтинг:
0

OriginalGriff

Если вы посмотрите на определение strlen: strlen-ссылка на C++ [^] он принимает параметр, который является указателем на символ-или, другими словами, строку-и возвращает количество символов до первого нулевого значения.
Это не то, что мы проходим мимо него: element это массив указателей на char - или массив строк. Поэтому он смотрит на массив так, как если бы это была строка, и делает это ужасно неправильно.

Передайте ему один из элементов массива, и он вернет то, что вы хотите!

n=strlen(element[0]);
Или
n=strlen(element[1]);
...