【问题标题】:How can you identify a string with a char pointer?如何识别带有 char 指针的字符串?
【发布时间】:2021-12-10 14:19:49
【问题描述】:

我正在从一本书中学习 c++,但我已经熟悉 c# 和 python 编程。我了解如何创建一个字符指针并增加内存地址以获取更多的字符串(字符),但是如何仅使用指向字符串的第一个字符的指针来获取字符串的长度,如下面的代码所示?

任何见解都会有所帮助!

String::String(const char * const pString)
{
     Length = strlen(pString)
}

【问题讨论】:

  • C 风格的字符串是null-terminatedstrlen 扫描直到找到 '\0' 然后停止。
  • 如何识别带有 char 指针的字符串? -- 你不能。发生的事情是 strlen 只是相信你给它的东西是空终止的,并且计数/递增直到命中空值。它什么都不知道。
  • 我认为这些 cmets 中有答案......而且这个问题似乎值得得到一个答案。
  • 这能回答你的问题吗? How does the strlen function work internally?

标签: c++


【解决方案1】:

std::strlen 的文档中解释了此行为

std::size_t std::strlen(const char* str);

返回给定字节字符串的长度,即字符数组中第一个元素由str指向的字符数,不包括第一个空字符。如果 str 指向的字符数组中没有空字符,则行为未定义。

所以它会计算最多但不包括'\0' 字符的字符数。如果在字符数组的分配范围内未遇到此字符,则行为未定义,并且在实践中可能会导致在数组范围外读取。请注意,字符串文字将隐式包含一个空终止字符,换句话说:

"hello" -> {'h', 'e', 'l', 'l', 'o', '\0'};

【讨论】:

    【解决方案2】:

    您可以用 C 风格实现自己的方法,例如:

    size_t get_length(const char * str) {
      const char * tmp = str;
      while(*str++) ;
      return str - tmp - 1;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2015-05-19
      • 2023-03-12
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多