I know I can use strcpy(student.name, "person") or student.name[6] = "person"
Fine, but do you know that the latter will not do what you expect?
An array is not a first class citizen in C. Full stop. You cannot have an array as the left member of an assignment simply because the C language does not allow it.
So when you use student.name[6]
this is not an array of 6 character, but only the seventh character. It is allowed by the language, because a character is a numeric type and that a pointer can be converted to an int.
So student.name[6] = "person"
first gets a pointer to the first element of the litteral string "person"
converts(*) it to an integer value (which may already be implementation defined if pointers are larger than ints) and then tries to store that into a single char which invokes undefined behaviour if char
is not unsigned. Is that really what you knew?
(*) In fact it is even worse because the language requires an explicit cast to convert a pointer to an arithmetic value so this code should at least raise a warning and warnings are not to be ignored. So as it violates a constraint the code is not valid C. Nevertheless, all common implementations that I know will either stop if asked to treat this warning as an error, or will continue the way I described above if not.