Harasees_Singh Ответов: 2

2 размерный массив в функцию не передается корректно в C++


Я пытался передать массив 2 измерений в функцию, и массив, полученный в функции, - это просто случайные символы

void SomeFunction(char arr[][50])
{
   //arr is just random strings
}

int main()
{
  char arr[50][50] = { {"Hello"}, {"World"} };
  SomeFunction(arr);
}


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

Я пробовал гуглить и все такое и делал все что он говорил и это все равно не работает

Stefan_Lang

Я добавил эту строку в SomeFunction() в компиляторе onlinegdb (https://www.onlinegdb.com/online_c++_компилятор):
cout << arr[0] << endl << arr[1] << endl;

Этот выход
Привет
Мир

Так в чем же заключается ваш вопрос?

2 Ответов

Рейтинг:
7

OriginalGriff

Чтобы добавить к тому, что говорит Патрис Т, попробуйте следующее:

void SomeFunction(char arr[][50])
{
    for (int i = 0; i < 50; i++)
    {
        if (arr[i][0] != '\0')
        {
            cout << arr[i] << "\n";
        }
    }
}

int main()
{
  char arr[50][50] = { {"Hello"}, {"World"} };
  SomeFunction(arr);
  return 0;
}
Он будет печатать только те строки, которые вы добавили при объявлении массива.


Patrice T

Привет ОГ,
Вы уверены насчет этого:

char arr[50][50] = { {"Hello"}, {"World"} };

OriginalGriff

Абсолютно. Он выделяет пространство для 50 строк по 50 символов и заполняет две из них копиями строковых литералов.

Прошло уже много времени с тех пор, как я много делал с C / C++, поэтому я проверил онлайн-компилятор:
https://www.onlinegdb.com/online_c++_компилятор

Patrice T

Хорошо, я принимаю к сведению этот контринтуитивный синтаксис, еще одну причину не использовать C++ :)

Stefan_Lang

onlinegdb принимает его просто отлично: https://www.onlinegdb.com/online_c++_компилятор

Рейтинг:
14

Patrice T

char arr[50][50] = { {"Hello"}, {"World"} };

Вы должны понимать, что строка - это массив символов.
Таким образом, ваш код представляет собой список строк, что означает список списков символов.
А строка - это завершенный нулем список символов.
Попробуй:
char arr[50][50] = { "Hello", "World" };