【问题标题】:C Programming: String arrays - how to check equality? [duplicate]C 编程:字符串数组 - 如何检查相等性? [复制]
【发布时间】:2019-02-13 00:28:40
【问题描述】:

我有一个这样的结构:

struct car{
    char parts[4][10];
};

我在我的 main() 函数中初始化它们,好像:

char fill[10] = "none";
struct car c;

int i = 0;
for (i; i< 4; i++){
    memcpy(c.parts[i], fill, 10);
}

此时,数组中的每个字符串都有“none”,像这样:

int j = 0;
for (j; j<4; j++){
    printf("%s\n", c.parts[j]);
}

*OUTPUT*
none
none
none
none

这是正确的——这就是我想要的。但是,现在我想编写一个函数并将一个指针传递给 c。在函数内部,我想:

  • 检查“parts”数组中的元素是否等于“none”。
  • 如果是,则将其设置为“wheel”。

这是我尝试过的方法:

void fun(struct car* c){
    char fill[10] = "wheel";

    int i = 0;

    for (i; i<4; i++){
          if (c->parts[i] == "none"){
              memcpy(c->parts[i], fill, 10);
          }
    }
}


int main(){ 
    char fill[10] = "none";
    struct car c;

    int i = 0;
    for (i; i< 4; i++){
        memcpy(c.parts[i], fill, 10);
    }

    struct car* c2 = c;
    fun(c2); 

    return 0;
}

但是,函数内部的 if 语句永远不会被命中!它一直说数组中的每个元素都不等于“无”。但是,我尝试在 if 语句的正上方打印它——果然,它说“无”!不知道为什么?

编辑 我尝试了“可能重复”帖子(strcmp)中建议的方法,但无济于事。我仍然没有得到我想要实现的目标。

【问题讨论】:

  • 亲爱的 Govind,我尝试了该帖子中的方法,但仍然无效(strcmp)。
  • 如果您正在使用字符串,您应该使用字符串函数(strcpystrcmp 等)。如果您正在处理任意数据,请使用memcpymemcmp 等...尽管memcpymemcmp 也可以很好地处理字符串。
  • if (c-&gt;parts[i] == "none"){ 需要更改为 if (strcmp(c-&gt;parts[i], "none") == 0){。在您所拥有的中,运算符== 正在比较2 个指针的值,其中c-&gt;parts[i] 在内存中,而"none" 在内存中。这些不相等,因此条件失败。 == 不比较字符串的内容。

标签: c arrays string struct memcpy


【解决方案1】:

使用&lt;string.h&gt;中的strcmp()fun()中进行比较,如下所示:

void fun(struct car* c){
    char fill[10] = "wheel";

    int i = 0;

    for (i; i<4; i++){
        if (!strcmp(c->parts[i], "none")) {
            memcpy(c->parts[i], fill, 10);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2021-02-13
    • 2021-03-24
    相关资源
    最近更新 更多