Arrays 控制台输出显示相同的字符串(char*)VAL,但不满足if语句条件(C语言)

Arrays 控制台输出显示相同的字符串(char*)VAL,但不满足if语句条件(C语言),arrays,c,if-statement,struct,Arrays,C,If Statement,Struct,注意到下面的代码与输出相比有什么有趣的地方吗?我保存并编译了文件,没有错误或警告 有趣的是,当i=1时,它告诉我元素和*(arr->elements+i)是相等的(即STRING3),但它没有进入if语句并为该i值打印“foundtheelement!” 这是我的密码: void arr_remove(Array *arr, char *element) { printf("Searching for element %s\n", element); for (int

注意到下面的代码与输出相比有什么有趣的地方吗?我保存并编译了文件,没有错误或警告

有趣的是,当i=1时,它告诉我元素和*(arr->elements+i)是相等的(即STRING3),但它没有进入if语句并为该i值打印“foundtheelement!”

这是我的密码:

void arr_remove(Array *arr, char *element)
{
  printf("Searching for element %s\n", element);
  for (int i = 0; i < arr->count; i++)
  {
    printf("i is %d and element is %s. Arr->elements is %s \n", i, element, *(arr->elements + i));
    if (element == *(arr->elements + i))
    {
      printf("Found the element %s!!\n", element);
      memmove(*(arr->elements + i), arr->elements + i + 1, sizeof(char *) * (arr->count - (i + 1)));
      return;
    }
  }
  fprintf(stderr, "Fprintf stderr: Array element not found\n");
}
换句话说,如果我加上这一行

printf("Boolean condition %d\n", (element == *(arr->elements + 1)));
输出是

Boolean condition 0

这是为什么?我能做些什么来修复它?是行尾(回车类型的东西吗?它们都是字符指针类型。如果有任何帮助,我们将不胜感激!

拥有
char*element
这意味着
element==*(arr->elements+i)
比较指针,如果要独立于地址比较字符串,请使用strcmp作为示例

什么是数组?输入是什么?
element==*(arr->elements+i)
比较指针,如果您想比较字符串,请使用strcmp作为实例,可能就是这样。让我检查一下是否修复了它。谢谢!!我喜欢这类问题,因为它让我对C和计算机本身有了更多的了解!欢迎您,注意我给出了一个答案请将
*(arr->elements+I)
写成
arr->elements[I]
相反,前者会伤眼睛。谢谢。我不明白为什么我的方法会比较指针和字符串,并打算询问您,但我找到了答案,我想我会与您分享。当我的语法将字符串输出到控制台时,我认为在if stmt中应该是相同的。实际上,这是因为printf与%s的工作方式。printf采用pointers,所以你的级别太高了。我推断,如果我在每边添加另一个解引用器*,它将在没有strcmp的情况下工作,事实上它做到了!我知道我不应该依赖于函数,即使它们适合用于其他原因,如可读性。
Boolean condition 0