BRAGA96
@BRAGA96

Как инициализировать изменяемый 2D массив char в struct C++?

Здравствуйте, мучаюсь с 2D массивом char'ов в struct C++ и прошу Вашей помощи.

Что нужно сделать? Инициализировать структуру с пустым 2D массивом char. Позже нужно записать строки в этот массив и вывести в консоль отдельные элементы массива с помощью for цикла.

У меня получилось инициализировать массив сразу, а не потом, таким образом:
#include <iostream>
using namespace std;

struct Wifi {
    char *access[2][2] = {
        {
            "TEST",
            "123456"
        },
        {
            "DIR",
            "654321"
        }
    };
} wifi;

int main() {

    for (int i = 0; i < sizeof(wifi.access) / sizeof(wifi.access[0]); i++) {
        cout << wifi.access[i][0] << ": " << wifi.access[i][1] << '\n';
        // TEST: 123456
        // DIR: 654321
    }

    return 0;
}


Привожу список своих проб и ошибок:
struct Wifi {
    char *access[1][2];
} wifi;

char ssid[32] = "TEST";
char password[32] = "123456";

wifi.access[0][0] = ssid;
wifi.access[0][1] = password;

// error: 'wifi' does not name a type


struct Wifi {
    char *access[1][2];
} wifi;

char ssid[32] = "TEST";
char password[32] = "123456";

strcpy(wifi.access[0][0], ssid);
strcpy(wifi.access[0][1], password);

// error: expected constructor, destructor, or type conversion before '(' token
//strcpy(wifi.access[0][0], ssid);
//      ^


struct Wifi {
    char access[1][2][32];
} wifi;

char ssid[32] = "TEST";
char password[32] = "123456";

wifi.access[0] = { ssid, password };

// error: 'wifi' does not name a type
 // wifi.access[0] = { ssid, password };
 // ^~~~
  • Вопрос задан
  • 139 просмотров
Решения вопроса 2
@res2001
Developer, ex-admin
Вот это работать не будет:
wifi.access[0] = { ssid, password };
Вам нужно явно делать пересылку памяти с помощью memcpy или strcpy для каждого элемента массива.

Но лучше используйте вместо charов std::string.
Ответ написан
@MarkusD Куратор тега C++
все время мелю чепуху :)
Вот так сработает.
Пример
#include <iostream>
using namespace std;

const char ssid[] = "TEST";
const char password[] = "123456";

struct Wifi {
    const char *access[2][2];
} wifi{
    {
        { ssid, password },
        { "DIR", "654321" }
    }
};

int main() {

    for (int i = 0; i < sizeof(wifi.access) / sizeof(wifi.access[0]); i++) {
        cout << wifi.access[i][0] << ": " << wifi.access[i][1] << '\n';
        // TEST: 123456
        // DIR: 654321
    }

    return 0;
}

Смотри на агрегатную инициализацию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы