【问题标题】:Checking the first letter of a string in c在c中检查字符串的第一个字母
【发布时间】:2017-09-06 16:40:27
【问题描述】:

我正在用 C 语言编写一个非常简单的函数来检查字符串是绝对路径还是相对路径。无论我尝试什么,它总是返回 false。

这是我尝试过的:

int isAbsolute(char *str){
    if(strcmp(str,"/")){
        return 1;
    }
    return 0;
}

我这样称呼它:

printf("%d\n", isAbsolute("/"));

每次都返回 false。显然我遗漏了一些明显的东西,但我无法弄清楚......

【问题讨论】:

  • strcmp 比较整个字符串,因此只有当您传递的字符串是“/”时它才会返回 true。您可以改为查看 strncmp,或仅比较一个字符 (if (str[0] == '/')),而不是字符串。
  • @AntonH:为什么不把这个作为答案呢?
  • @alk 我只想评论为什么它不起作用,但在之后编辑了一个解决方案。现在把它作为答案......
  • 哇,好的,谢谢。我也试过这个,但我使用的是“/”而不是“/”。谢谢你。不知道为什么当我使用“/”时,它会尝试将 str[0] 作为指针和“/”作为 int 进行比较?

标签: c strcmp strncmp


【解决方案1】:

没有编译器的访问权限,但我认为这会起作用,因为 C 风格的字符串只是带有终止字符的数组:

int isAbsolute(const char *str){
    return (str[0] == '/');
}

【讨论】:

  • 您可能想使用const char * str。
  • 不知道您使用的是什么操作系统/shell,但cd /../ 将我留在根目录中,而不是在 cwd 的父级中。
【解决方案2】:

正如所指出的,strcmp 仅在被比较的字符串长度相同时才匹配。

要比较字符串前面的单个字符,您可以这样做:

int isAbsolute(const char *str) {
  return (str[0] == '/');
}

如果您要查找的前缀超过一个字符,那么this 可能会有所帮助。我更喜欢 Fred Foo 的答案,而不是被接受的答案(大多数选民也是如此)。

【讨论】:

    【解决方案3】:

    strcmp 比较整个字符串,因此如果您传递的字符串是“/”,您的函数只会返回 true。

    您可以改为查看 strncmp:

    if(strncmp(str,"/", 1)) ...
    

    或只比较一个字符:

    (if (str[0] == '/')) ...
    

    【讨论】:

      【解决方案4】:

      与strncmp 类似,您可以使用memcmp,它具有要比较的字节数作为参数:

      int isAbsolute(const char *str){
          if (0 == memcmp(str, "/", 1){
               return 1;
          } else {
               return 0;
          }
      }
      

      不要忘记返回值 $0$ 表示相等。在您的代码中,您在这种情况下返回 0,这可能与您的预期不同。

      【讨论】:

        【解决方案5】:

        Strcmp 返回值在成功的情况下为零,这就是为什么它不会为真

        【讨论】:

          猜你喜欢
          • 2011-04-03
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多