【问题标题】:Help understanding const char* operators in c++帮助理解 C++ 中的 const char* 运算符
【发布时间】:2011-08-27 17:01:26
【问题描述】:

我需要将一些代码从 c++ 转换为 java,但我不太确定如何处理“const char*”运算符。检查以下代码:

const char* handText;
const char* index = strchr(handText, '-');
char handCeil[4];
char handFloor[4];
strncpy(handCeil, handText, index - handText);
strcpy(handFloor, index + 1);

我得到的是这样的:

String handText;
String index = handText.substring(handText.indexOf('-'));
char handCeil[4];
char handFloor[4];

但是,我不知道在 c++ 中添加整数 (index + 1) 或减去 (index - handText) 字符串时是什么意思。对不起,如果这是一个愚蠢的问题,但我从来没有学会如何用 c++ 编程,只用 java 编程。谢谢。

【问题讨论】:

  • 我不完全确定您的问题,但是您没有在 C++ 中使用“字符串”,而是在 C++ 中使用 char* ...如果您想在 C++ 中使用字符串Java(或尽可能接近 Java)#include 并使用其中的方法。

标签: java c++ string operators translation


【解决方案1】:

在 Java 中你不能乱用指针。您可以使用String 方法(例如subString(int startIdx, int endIdx))提取子字符串以分配给handCeil 和handFloor。我宁愿将它们保留为 Java String。如果以后您需要访问单个字符,您可以通过charAt(int idx) 方法来完成。

【讨论】:

    【解决方案2】:

    将 1 添加到 char*(指针)会使指针增加 1 个字符。

    所以在提供的代码中,由于 index 指向 handText 中的“-”,增加它会导致指针现在指向下一个字符。

    (顺便说一句,提供的 C++ 代码根本不安全,并且会导致 handText 的许多可能值出现严重错误,例如“这是一个字符串-”。;)

    【讨论】:

      【解决方案3】:

      这个

      strncpy(handCeil, handText, index - handText);
      strcpy(handFloor, index + 1);
      

      等价于

      int index = handText.indexOf('-'); // I changed this for you
      handCeil = handText.substring(0, index+1);
      handFloor = handText.substring(index+1);
      

      所以它用'-'分割字符串并将第一部分(包括'-'本身,我认为)放入handCeil,其余部分放入handFloor

      index - handText 表示:index 指向特定字符,handText 指向该字符串的开头。如果将两者相减,则得到这两个指针之间的字符数,或第一个“-”的数组索引。 strncpy 复制 n 字节,因此如果 index 指向第三个字符,它将复制 3 个字符。 index + 1 表示指向index 所指向的字符1 之后的字符。

      【讨论】:

        【解决方案4】:

        sn-p 调用未定义的行为

        const char* handText;
        const char* index = strchr(handText, '-');
        

        handText 是一个未初始化的指针常量。将其作为参数传递给strchr 会调用UB。 strchr 返回指向 -handText 中第一次出现的指针,但 handText 没有指向任何位置或垃圾。

        【讨论】:

        • 很抱歉,我写错了代码,但从理论上讲,handText 是该函数的输入之一。不过你是对的。
        • @Pedro Cimini - 没什么好遗憾的 :) 我以为你可能不知道这一点,但很高兴你真的知道。
        猜你喜欢
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多