Вот структура, которую я использую.
#define MAX_CAR_LEN 12 ///< length does not include the trailing NUL byte
/// Racer_S structure represents a racer's row, position and display graphic.
typedef struct Racer_S {
int row; ///< vertical row or "racing lane" of a racer
int distance; ///< column of rear of car, marking its position in race
char *graphic; ///< graphic is the drawable text of the racer figure
} Racer;
Когда я вызываю эту функцию, внутри нее все работает нормально и все создает правильно. Я могу получить доступ к ряду и расстояние в порядке. Когда я пытаюсь распечатать графику, в моем терминале печатается пустая строка. Я полагаю, что это может быть потому, что «графика» в структуре - это char *, но я назначаю ему массив char фиксированного размера. Когда эта функция вызывается и передается под именем «Том», предполагается, что рисунок будет «~ O = Tom ---- o>». Я новичок в C, что я делаю не так?
Racer * make_racer( char *name, int row ){
//Creating a newRacer instance
Racer *newRacer = malloc(sizeof(*newRacer));
newRacer->graphic = (char*)malloc(MAX_CAR_LEN);
char car[MAX_CAR_LEN] = "~O="; //"~O=-------o>"
char *pCar;
int length = strlen(name) + 2;
//Add the name after the engine of the car
for (int i = 0; i < length; ++i)
car[i+3] = name[i];
//Calculate the amount of dashes needed
int printDashes = 7 - strlen(name);
//add the extra dashes
for (int j = 1; j <= printDashes; ++j)
car[length + j] = '-';
// creates the end of the car
car[MAX_CAR_LEN-2] = 'o';
car[MAX_CAR_LEN-1] = '>';
pCar = strdup(car);
newRacer->row = row;
newRacer->distance = 0;
newRacer->graphic = &car[0];
// printf("%s\n", car);
return newRacer;
}
Это код, который я запускаю на своей главной странице, чтобы проверить его
Racer *t = make_racer("Tom", 4);
printf("%s\n", t->graphic);