我尝试了几种不同的方法来使其正常工作,但是基本上我的名字最长为6个字母,并且我需要将其输入到char *汽车中以代替“-”。例如,如果名称是Bob,那么汽车应该看起来像〜O = Bob ---- o>
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;
Racer * make_racer( char *name, int row ){
Racer *newRacer;
char *car = "~O=-------o>";
for (int i = 0; i < strlen(name); ++i)
car[i+3] = name[i];
// printf("%s\n",car);
// newRacer->row = row;
// newRacer->distance = 0;
// newRacer->graphic = car;
return newRacer;
}
答案 0 :(得分:1)
car
指向字符串常量。这些是只读的,因此您无法对其进行修改。
相反,为字符串分配内存,然后对其进行修改:
char *car = strdup("~O=-------o>");
您还需要为newRacer分配内存:
Racer *newRacer = malloc(sizeof(*newRacer));
如果这些函数失败,请不要忘记检查它们的返回值。
答案 1 :(得分:0)
问题出在声明car
的方式上。当用字符串文字定义为char*
时,实际上是在将对字符串的引用存储在只读存储器区域中。为了避免这种情况,您只需要将变量声明为char[]
,就像这样:
char car[] = "~O=-------o>";
这基本上是以下等效代码的语法糖:
char car[] = { '~', 'O', '=', '-', '-', '-', '-', '-', '-', '-', 'o', '>', '\0' };