Использование std :: vector и std :: string обычно избавит вас от головной боли, как только вы их поймете.Поскольку вы новичок в C ++, было бы полезно понять, что происходит с двумерными массивами.
Когда вы говорите
char array[N][M];
, когда N и M являются константами,не переменные, вы говорите компилятору выделить N * M элементов типа char.Там будет блок памяти, выделенный для этого массива размером N * M * sizeof (char).(Вы можете объявить массив чего угодно, не только char. Так как sizeof (char) равен 1, память будет иметь длину N * M байт.) Если вы посмотрите на необработанную память, первый байт в памяти будет где массив [0] [0] есть.Второй байт будет где массив [0] [1], и так далее, для М байтов.Тогда вы увидите массив [1] [0].Это называется основным порядком строки.
Как уже упоминалось @ jbat100, когда вы говорите массив [i] [j], вы ссылаетесь на один символ.Когда вы говорите массив [i], вы ссылаетесь на адрес строки i в массиве.Указатель фактически не хранится в памяти, но когда вы говорите массив [i], компилятор знает, что вы имеете в виду, что вам нужен адрес строки i в массиве:
char* row_i = array[i];
Теперь, если i> 0,затем row_i указывает где-то в середине этого блока памяти, выделенного для массива.Это сделало бы то же самое:
char* row_i = &array[i][0];
Если у вас есть строка «orange» и вы знаете, что ее длина меньше M, вы можете сохранить ее в заданной строке в массиве,как это:
strcpy(array[i], "orange"); // or
array[i][0] = 'o'; array[i][1] = 'a'; ... array[i][6] = 0;
Или вы могли бы сказать row_i вместо массива [i].Это копирует 7 байтов в массив в расположении row_i.Strcpy () также копирует дополнительный байт, который равен 0, и это соглашение для завершения символьной строки в C и C ++.Таким образом, 7 байтов - это шесть байтов: «o», «r», «a», «n», «g» и «e» плюс 0 байт.Теперь strcmp (row_i, "orange") == 0.
Помните, что если ваша строка длиннее, чем M, strcpy и простые char-назначения (вероятно) не приведут к ошибке компиляции, но вы закончитекопирование части вашей строки в следующий ряд.
Прочтите об указателях и массивах в хорошей книге по C / C ++.