Компилятор выдаёт ошибку при попытке вызвать sizeof() относительно моего массива. Как исправить ошибку?
Мне необходимо было измерить длину моего массива (кол-во элементов) и я решил поделить размер массива (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]).
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для начала стоит отметить, что функция `sizeof()` в PHP является псевдонимом функции `count()`, которая используется для подсчета количества элементов в массиве. Поэтому, если у вас возникает ошибка при вызове `sizeof()` относительно массива, то возможно это связано с тем, что данная функция не существует в PHP.
Для исправления ошибки вам следует заменить `sizeof()` на `count()`. Пример:
$array = array(1, 2, 3, 4, 5); $count = count($array); echo $count; // выведет 5
Если у вас все еще возникают проблемы после замены `sizeof()` на `count()`, то возможно проблема кроется в том, что массив не был объявлен или неправильно инициализирован. Убедитесь, что массив был создан и заполнен элементами перед вызовом функции `count()`.
Если вы все еще столкнулись с ошибкой, убедитесь, что вы используете правильный синтаксис для объявления массива в PHP. Например:
$array = array(1, 2, 3, 4, 5);
Если после всех этих шагов ошибка все еще возникает, попробуйте обновить версию PHP на вашем сервере, так как некоторые старые версии могут не поддерживать некоторые функции.