C - 如何将取消引用的值传递给函数以稍后与另一个字符串进行比较时获取原始值?



我知道家庭作业帮助是回避的,但是,我有强烈的程序员障碍。

我最需要的是理解的帮助。

因此,当我获取变量 (&c) 的地址时,我知道我得到了一个地址到它在内存中的位置,但我不知道如何取消引用该地址以访问其特定值 ('b') 以在函数中进行比较(颜色(&c,总计)它在其中。

由于任务的要求,主不能以任何理由更改

typedef struct dragon
{
char *name;
char *color[3];
int numHead;
int numTail;
}dragon;
void color(char* color, dragon *d);
int main()
{
dragon total[4];
dragon_info(total);
char c = 'b';
color(&c, total);
return 0;
}

最终,我用这条线来查看颜色是否匹配

if(strcmp(color, d[currentDra].color[currentColor]);

在我使用下面的行之前,因为从我的第一个角度来看,他们会烧焦

if(color ==  d[currentDra].color[currentColor])

但是在调试了一段时间后,我意识到颜色只是一个地址

总的来说,我需要以某种方式使用地址获取颜色的值。 *颜色找不到该值。 颜色也没有。

函数的其余部分

void color(char *color, dragon *d)
{
char *colorList[5] = {"red","blue","white","green","yellow"}; 
int colorShow;
int knownColor = 1;
printf("what is color? ==== %pn", color);
if(*color == 'r')
{
colorShow = 0;
}
else if(*color == 'b')
{
colorShow = 1;
}
else if(*color == 'w')
{
colorShow = 2;
}
else if(*color == 'g')
{
colorShow = 3;
}
else if(*color == 'y')
{
colorShow = 4;
}
else
{
printf("Sorry that is an unknown color, exiting...n");
knownColor = 0;
}

//if a char then = numbers 0-1
//one loop for the dragons
if(knownColor)
{
printf("***All the %s dragons:***n", colorList[colorShow]);
int currentDra;
for(currentDra = 0; currentDra < 4; currentDra++)
{
//another loop for the colors of the dragon
int currentColor;
for(currentColor = 0; currentColor < 3; currentColor++)
{
//printf("%cnn", (char*)color);
if(strcmp(color, d[currentDra].color[currentColor]))
{
printf("%s is %sn", d[currentDra].name, colorList[colorShow]);
}
}
}
}
}

非常感谢,这是我的第一个问题。

if(strcmp(color, d[currentDra].color[currentColor]);

这不起作用,因为传递color不是以 null 结尾的。因此,这是未定义的行为。

if(color == d[currentDra].color[currentColor])

这不起作用,因为您正在比较指针而不是它们引用的值。

如果dragon.color是包含单个字符串的数组,则可以与:

if(color[0] == d[currentDra].color[currentColor][0])

相关内容

  • 没有找到相关文章

最新更新