【问题标题】:How do i determine the length of a string if it's declared as const char *str?如果将字符串声明为 const char *str,如何确定字符串的长度?
【发布时间】:2014-10-25 19:44:24
【问题描述】:

我有如下函数结构

int function(const char *str)
{
    return 0;
}

我永远无法完全理解为什么人们使用char *str 而不仅仅是string str。所以我猜这基本上意味着参数是指向字符串第一个字符的指针。给定该参数,我如何确定字符串 str 的长度?

我尝试的是遍历str,如果我点击NULL""'',那么这将结束。但是,这些类型都不兼容以进行比较。请给我一些关于这个的线索。谢谢!

【问题讨论】:

标签: c string pointers


【解决方案1】:

Jamesdlin 的回答很好,但要回答您关于比较的问题,您可以使用'\0', IE:

char* a = "a";
int size = 0;
while (a[size] != '\0')
    size++;

NULL是一个指针宏,""是一个空字符数组(虽然它有一个隐含的'\0',所以理论上你可以做到strcmp(a, "");),而''只是一个空字符,我'不确定这是否是一个有效的陈述。

另外,std::string 是一个 C++ 类,在 C 标准库中不存在。

【讨论】:

    【解决方案2】:

    在 C 中,字符串通常以 NUL 结尾。对于以 NUL 结尾的字符串,您只需调用 strlen(str)

    我永远无法完全理解为什么人们使用 char *str 而不是简单的字符串 str。

    C 中没有string 类型。您可以添加typedef

    typedef char* string;
    

    但是为指针类型添加typedefs 通常是一个坏主意(因为现在您需要为const char* 单独添加一个typedefconst string是同一件事)。

    虽然这样做似乎是个好主意,但实际上它会掩盖您的代码,因为字符串的char*/const char* 是常态。

    【讨论】:

    • 注意:根据 C 规范定义,字符串总是 '\0' 终止。没有终止空字符的char 数组不是字符串。
    【解决方案3】:

    您几乎是正确的,char *str 是指向 char 数组的第一个字符的指针,但 C 没有预定义的字符串类型 - 它只是一个以零结尾的 char 数组。不要尝试编写函数(尽管这将是一个很好的学生练习),只需使用 strlen (str); 调用 <string.h> 中的库函数,它需要一个指向字符数组的指针。你不通过*str&str 而只是str 如果它是一个声明的数组变量。如果内存是动态分配的,则传递分配的指针,因此如果将指针声明为char *memstr,则将其传递为memstr。正如其他人所说,最好不要尝试定义字符串,更好地了解char数组的工作原理。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2021-12-31
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多