Компилятор выдаёт ошибку при попытке вызвать sizeof() относительно моего массива. Как исправить ошибку?

Ссылка скопирована
C#
1 ответ

Мне необходимо было измерить длину моего массива (кол-во элементов) и я решил поделить размер массива (sizeof(массив)) на (sizeof(тип элемента массива)), но компилятор выдаёт ошибку.

int one_symb_diff(const char *s1, const char *s2) {     int len = strlen(s1);     int diff_n = 0;     for (size_t i = 0; i < len; i++)     {         if (s1[i] != s2[i]) diff_n ++;      }     if(diff_n == 1) return 1;     else return 0; }  int word_chain(const char *s1, const char *s2, const char *dict[]) {     for (size_t i = 0; i < sizeof(dict)/sizeof(const char); i++)     {         if ((one_symb_diff(dict[i], s1)) * (one_symb_diff(dict[i], s2))) return i;     }     return -1; // заменить 0 на ответ }

int one_symb_diff(const char *s1, const char *s2) { int len = strlen(s1); int diff_n = 0; for (size_t i = 0; i < len; i++) { if (s1[i] != s2[i]) diff_n ++; } if(diff_n == 1) return 1; else return 0; } int word_chain(const char *s1, const char *s2, const char *dict[]) { for (size_t i = 0; i < sizeof(dict)/sizeof(const char); i++) { if ((one_symb_diff(dict[i], s1)) * (one_symb_diff(dict[i], s2))) return i; } return -1; // заменить 0 на ответ }

sizeof’ on array function parameter ‘dict’ will return size of ‘const char **[-Wsizeof-array-argument]    17 |     for (size_t i = 0; i < sizeof(dict)/sizeof(const char); i++)       |                                  ^

‘sizeof’ on array function parameter ‘dict’ will return size of ‘const char **’ [-Wsizeof-array-argument] 17 | for (size_t i = 0; i < sizeof(dict)/sizeof(const char); i++) | ^

Дополнительно:

В C параметр функции не может быть массивом, только указателем. Синтаксис "имя с квадратными скобками" несёт тот же смысл, что и "имя со звёздочкой" когда речь идёт о параметрах функции. Если внутри функции взять sizeof от такого параметра результат будет равен sizeof от указателя. Это очень распространённая ошибка и компилятор говорит тебе об этом. Если тебе нужен размер массива переданного в функцию -- передавай его отдельно, например отдельным параметром.

sizeof(dict)/sizeof(const char)

Здесь ещё одна ошибка: dict -- это массив указателей (на самом деле указатель на такой массив, но по крайней мере, ты ожидал массив указателей), но ты делишь размер массива на размер const char а не на размер const char *. Во избежание таких ошибок для вычисления размера массива обычно пишут sizeof(dict)/sizeof(dict[0]).

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

Для начала стоит отметить, что функция `sizeof()` в PHP является псевдонимом функции `count()`, которая используется для подсчета количества элементов в массиве. Поэтому, если у вас возникает ошибка при вызове `sizeof()` относительно массива, то возможно это связано с тем, что данная функция не существует в PHP.

Для исправления ошибки вам следует заменить `sizeof()` на `count()`. Пример:

$array = array(1, 2, 3, 4, 5);
$count = count($array);
echo $count; // выведет 5

$array = array(1, 2, 3, 4, 5); $count = count($array); echo $count; // выведет 5

Если у вас все еще возникают проблемы после замены `sizeof()` на `count()`, то возможно проблема кроется в том, что массив не был объявлен или неправильно инициализирован. Убедитесь, что массив был создан и заполнен элементами перед вызовом функции `count()`.

Если вы все еще столкнулись с ошибкой, убедитесь, что вы используете правильный синтаксис для объявления массива в PHP. Например:

$array = array(1, 2, 3, 4, 5);

$array = array(1, 2, 3, 4, 5);

Если после всех этих шагов ошибка все еще возникает, попробуйте обновить версию PHP на вашем сервере, так как некоторые старые версии могут не поддерживать некоторые функции.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно