I created a linked list that contains a char array. Then I tried to print it using %s and it would not print. I know I have to transform the char by adding in '\0' so that it can print using '/0'. But I'm not sure why.
For example if I input:
Bob 20
It should print:
New student created: Bob is 20 years old.
BUT: it's printing (without "Bob"):
New student created: is 20 years old.
#include <stdio.h>
#include <stdlib.h>
struct student {
      char name[50];
      int age;
      struct student *next;
};
struct student *createStudent(char studentName[], int studentAge);
int main(void) {
    struct student *studptr;
    int myAge;
    char myName[50];
    scanf("%s %d", myName, &myAge);
    studptr = createStudent(myName, myAge);
    printf("New student created: %s is %d years old.\n", studptr->name, studptr->age);
    free(studptr);
    return 0;
}
struct student *createStudent(char studentName[], int studentAge){
    struct student * ptr;
    ptr = (struct student *)malloc(sizeof(struct student));
    ptr->name[50] = studentName[50];
    ptr->age = studentAge;
    ptr->next = NULL;
    return ptr;
}
NOTE: I understand the code below will work and print the correct name, where I add an additional method to change the char array called copyStr(), but I'm not sure why....
#include <stdio.h>
#include <stdlib.h>
struct student {
      char name[50];
      int age;
      struct student *next;
};
struct student *createStudent(char studentName[], int studentAge);
void copyStr(char *source, char *target);
int main(void) {
    struct student *studptr;
    int myAge;
    char myName[50];
    scanf("%s %d", myName, &myAge);
    studptr = createStudent(myName, myAge);
    printf("New student created: %s is %d years old.\n", studptr->name, studptr->age);
    free(studptr);
    return 0;
}
struct student *createStudent(char studentName[], int studentAge){
    struct student * ptr;
    ptr = (struct student *)malloc(sizeof(struct student));
    //we need to translate the char into a string
    copyStr(studentName, ptr->name);
    ptr->name[50] = studentName[50];
    ptr->age = studentAge;
    ptr->next = NULL;
    return ptr;
}
void copyStr(char *source, char *target){
    int i = 0;
    while(source[i] != '\0')
    {
        target[i] = source[i];
        i++;
    }
    target[i] = '\0';
}
 
     
    