C - Могу ли я сделать 2d массив без указания размера каждого слота - PullRequest
0 голосов
/ 16 января 2019

В моей домашней работе меня попросили написать программу, и часть ее заключалась в том, чтобы создать двумерный массив и вставить в него 10 имен.Теперь они не указали размер каждого имени, теперь у меня вопрос, как мне сделать 2d массив без указания размера каждого имени?char arr[10][?] = {0};

1 Ответ

0 голосов
/ 16 января 2019

Если вы еще не узнали об указателях, то самый простой способ - рекомендация Weather Vane выбрать максимальную длину имени и использовать ее для каждого подмассива в вашем 2d-массиве.

Вам не нужно «удалять эти лишние пустые (или 0)« слоты », потому что когда вы пишете строку в c или когда вы используете scanf или printf со строками, строки заканчиваются нулем. Это означает, что когда вы помещаете имя в подмассив, имя, вероятно, уже будет иметь нулевое окончание (значение 0) для обозначения конца строки. Каждое значение после этого нулевого завершения игнорируется при работе с функциями, имеющими дело со строками с нулевым символом в конце.

Например.

char name[] = "Bob";

фактически эквивалентно выполнению любого из этих:

char name[] = { 'B', 'o', 'b', '\0'};  //'\0' is a null termination
char name[] = {0x42, 0x6F, 0x62, 0x0}; // ascii hex codes, '\0' translates to 0x0

(не имеет значения, насколько велико имя [], если строка заканчивается нулем и используемые вами функции знают об этом). Вы можете вручную вставить нулевое завершение, если по какой-то причине, когда вы вводите имя, у него его еще нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...