如何在C99中通过char *进行迭代?

时间:2018-11-13 03:01:00

标签: c arrays string c99

我尝试了几种不同的方法来使其正常工作,但是基本上我的名字最长为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;
    }

2 个答案:

答案 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' };