如何遍历C99中的字符*?

如何遍历C99中的字符*?,c,arrays,string,c99,C,Arrays,String,C99,我尝试了一些不同的方法来实现这个功能,但基本上我有一个6个字母长的名字(最多),我需要将它输入到char*car中,而不是“-”。例如,如果名字是鲍勃,汽车应该看起来像~O=Bob---O> typedef结构赛车手{ int row;//graphic=汽车; 返回newRacer; } car指向一个字符串常量。这些是只读的,因此您不能修改它们 而是为字符串分配内存,然后修改: char *car = strdup("~O=-------o>"); 您还需要为newRacer分配内存

我尝试了一些不同的方法来实现这个功能,但基本上我有一个6个字母长的名字(最多),我需要将它输入到char*car中,而不是“-”。例如,如果名字是鲍勃,汽车应该看起来像~O=Bob---O>

typedef结构赛车手{
int row;//<赛车手的垂直行或“赛道”
int距离;//<汽车后部立柱,标记其在比赛中的位置
char*graphic;//”;
对于(int i=0;i行=行;
//新赛车手->距离=0;
//newRacer->graphic=汽车;
返回newRacer;
}

car
指向一个字符串常量。这些是只读的,因此您不能修改它们

而是为字符串分配内存,然后修改:

char *car = strdup("~O=-------o>");
您还需要为newRacer分配内存:

Racer *newRacer = malloc(sizeof(*newRacer));

不要忘记检查这些函数的返回值,以防它们失败。

问题在于您声明
汽车的方式。当定义为带有字符串文本的
char*
时,真正发生的是在只读内存区域中存储对字符串的引用。要避免这种情况,只需将变量声明为
char[]
,如下所示:

char car[] = "~O=-------o>";
这基本上是以下等效代码的语法糖:

char car[] = { '~', 'O', '=', '-', '-', '-', '-', '-', '-', '-', 'o', '>', '\0' };

什么是
Racer
?这是您可以控制的吗?在许多平台上,您将无法修改该缓冲区。即使你能够,你A)丢弃它,B)它在堆栈上。Racer是指向char*的指针吗?请提供定义说明:仅依靠编译器计算
strlen
一次并不是一个好主意。我强烈建议在循环外计算
strlen(name)
一次,将其存储到一个变量中,然后将其用于循环条件测试,而不是使循环潜在地
O(n**2)
通过重复
strlen
测试
strlen
次。使用大括号初始化时,应包括tralling NUL字符:
…,'>','\0'}此问题以前已回答过多次。与其发布另一个答案,不如转到,从列表中选择一个标准副本,在“字符串”部分,然后关闭问题。也就是说,教新手使用
strdup
而不声明它不可移植不是一个好主意。
char car[] = { '~', 'O', '=', '-', '-', '-', '-', '-', '-', '-', 'o', '>', '\0' };