【问题标题】:I can't access a char as a string我无法将 char 作为字符串访问
【发布时间】:2021-03-08 19:01:31
【问题描述】:

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

char values[] = {"abcde"};

int main(int argc, char *argv[])
{
    printf("%d\n", strcmp(&values[0], argv[1]));
    return EXIT_SUCCESS;
}

我是这样编译和启动的:

$ gcc main.c -o main
$ ./main a
98

strcmp的结果是98,所以值不一样。当我在代码中将&amp;values[0] 替换为"a" 时,我看到它们是相同的(strcmp 输出等于0)。

那么有没有办法将values[0] 作为字符串访问?我想我需要在末尾以某种方式指定 \0 以便将 char 用作字符串,但我找不到方法。

【问题讨论】:

  • {"abcde"};
  • 你想做什么?这看起来像一个 XY 问题。
  • 我不明白。 So is there a way to access values[0] as a string ? 您正在以字符串的形式访问它(对我而言)。 “以字符串形式访问某些内容”是什么意思?您想只比较字符串的初始部分吗? IE。你解释了发生了什么。请说明您希望发生什么。
  • @KamilCuk 抱歉没有解释。我的最终目标是能够找到一种使 values[0] 等于“a”的方法。 Aplet123 提供的解决方案适用于我的情况,也许它有助于理解我想要做什么!
  • @HugoBlanc 好吧,大括号不需要了:)

标签: c string char strcmp


【解决方案1】:

原因是values[0] 后面没有空字节,因此您最终将"abcde""a" 进行比较,这不是您想要的。您可以改为分配一个包含空字节的两个字符数组:

char mystr[2] = {values[0]}; // rest of the array is zeroed (null bytes)
printf("%d\n", strcmp(mystr, argv[1]));

【讨论】:

    【解决方案2】:

    无需复制values[0](如Aplet123's answer 建议的那样)或修改values,您可以使用strncmp 指定最多只能比较一个字符:

    printf("%d\n", strncmp(values, argv[1], 1));
    

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多