«индекс «8» находится вне допустимого диапазона от «0 до 1″ для, возможно, перегруженного стеком массива». Как бы мне это исправить?

#c

#c

Вопрос:

Это функция, которая, похоже, не работает, вероятно, какой-то синтаксис, который я ошибся в отношении создания массива. В нем также говорится что-то о том, что читаемые байты равны 8, но 12 могут быть прочитаны.

 int sum = 0;
std::string total;
std::string space = " ";
cout << "Enter numbers:n"; 

int array[2] = { 0, 0 };

int i; 
for (i = 0; i < sizeof(array); i  ) {

    std::cin >> array[i];
    int size = 0;

    for (int z = 0; z < 0; z  ) {

        array[i] /= 10;

        size  ;
    }


    for (int b = 0; b < size; b  ) {


        int multiplication = 0;

        multiplication = array[i] % 10;
        multiplication *= size;
        sum  = multiplication;
        array[i] /= 10;
    }




    total  = std::to_string(sum);
    total.append(space);


}

std::cout << total;
 

Комментарии:

1. не могли бы вы опубликовать сообщение об ошибке

2. sizeof(array) возвращает 8, которое вам нужно sizeof(array) / sizeof(*array) = 2

3. Используйте циклы for на основе диапазона. Они предоставляют отличный способ избежать этой проблемы: for (i = 0; i < sizeof(array); i ) { std::cin >> array[i]; ... становится for(intamp; v : array) { std::cin >> v; ...

Ответ №1:

Вы можете использовать std::size(array) начиная с C 17. Это возвращает N, количество элементов в массиве C , объявленном как T array[N] . Чтобы получить std::size , вам нужно включить файл заголовка любого стандартного контейнера C , например #include <array> . См. std::size

Ответ №2:

sizeof Оператор возвращает размер в байтах своего аргумента. Если вам нужен размер в элементах массива, вы также должны разделить на размер типа данных:

Размер массива в элементах arr T sizeof arr/sizeof(T) равен.

Поддержка C 17 и более поздних std::size версий, которая возвращает размер массива в элементах.