c - strcmp 仅在循环开始时起作用

标签 c arrays string char strcmp

我一直在尝试创建一个简单的程序来循环遍历数组的成员并扫描字符以查找一组特定的字符。我遇到了 strcmp() 仅在循环开始时起作用的问题。我很难理解为什么会发生这种情况,我们将不胜感激。

char *file[3] = {"!x", "!!x", "x!"};

for (int i = 0; i < sizeof(file) / sizeof(file[0]); i++) {
  char *line = file[i];
  printf("\n");
  for (int i = 0; i < strlen(line); i = i + 1) {
    char character = line[i];
    if (strcmp("!", &character) == 0) {
      printf("[YES] %c\n", character);
    } else {
      printf("[NO] %c\n", character);
    }
  }
}

输出

[YES] !
[NO] x

[YES] !
[NO] !
[NO] x

[NO] x
[NO] !

最佳答案

strcmp 函数需要一个空终止字符串的地址。相反,您将 char 的地址传递给它。 strcmp 然后尝试读取超过 character 的内存位置,导致 undefined behavior .

然而,真正的问题是您不想比较字符串。您想比较字符。

if (character == '!') {

关于c - strcmp 仅在循环开始时起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603759/

相关文章:

java - 使用 Amorino 从 Arduino 向 Android 发送和接收数据结构(反之亦然)

javascript - 以不同的方法在 javascript 中添加列表

php - Laravel - 如何查询数据库中的数组字段是否包含值

c++ - 从 c 调用 swift

c - 如何在 C 中遍历目录

c++ - 双除以双和整数 : which one is better?

c++ - &(array+1) 在 &arr 工作时给出编译错误

php - 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

javascript - 如何在 Javascript 中动态删除字符串中的多余空间?

c# - C#中的字符串字符差异