Как получить доступ к массиву внутри структуры в C / C ++ - PullRequest
0 голосов
/ 27 мая 2018

У меня есть следующий массив,

struct Student{
char* Name;
int age;
Student* Next;
};

И я использовал следующие шаги для доступа к полям char *.

Метод 1;

Student s1 = {strdup("Name1"),26};

Method2:

Student s2;
s2.Name = strdup("Name2");
s2.age  = 26;

Здесь я хотел бы знать, есть ли другой способ получить доступ к полю char * и, если нет, существует ли конкретный и лучший способ доступа к полям char *.

Также, каков наилучший способ иметь такую ​​структуру данных, как имя, адрес и т. Д. Внутри структуры.я должен пойти с вышеупомянутым методом char *?или я могу иметь массив вместо?или в этом будет иметь смысл строка? (есть ли другой метод, доступный вместо char *. char array [], string stringname)

Моя конечная цель - правильно структурировать структуру данных с наилучшей методологией доступа.Пожалуйста, помогите !!!

struct DataStruct{
(char*/char [] / string) Name; // Need a best way 
} 

и механизм доступа.

если у нас есть только три механизма, такие как char *, char [] и string, то, пожалуйста, посоветуйте лучший способ доступа к нимиз int main ().

Большое спасибо

1 Ответ

0 голосов
/ 27 мая 2018

Что касается выбора между char* / char[] и std::string, как я сказал в комментарии:

Строки в стиле C вводят ненужный «слой указателя» (вусловия прямого использования).Также у них есть неудобство того, чтобы быть законченным нулем.std::string абстрагирует это удобным способом

Относительно различных подходов инициализации: оба почти эквивалентны как .

Это означает, что без какого-либо видапреобразования

Student s1 = {strdup("Name1"),26};

и

Student s2;
s2.Name = strdup("Name2");
s2.age  = 26;

взаимозаменяемы.

Разница заключается в другом:

Student s1 = {strdup("Name1"),26};
cout << s1.Name;

Student s2;
cout << s2.Name;
s2.Name = strdup("Name2");
s2.age  = 26;

Здесь есть то, чтомы называем неопределенным поведением .Вы получаете доступ к s2.Name до его инициализации / получения значения.

Если вам нужно выбрать, предпочтите Student s1 = {strdup("Name1"),26};, который гарантирует, что любое использование членов допустимо.Если вам нужен (в каком-то сценарии) второй подход, убедитесь, что то, к чему вы обращаетесь, действительно инициализировано.

...