我需要将一些代码从 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++ 中添加整数(索引 + 1)或减去(索引 - handText)字符串时是什么意思。对不起,如果这是一个愚蠢的问题,但我从未学过如何用 c++ 编程,只学过 java。谢谢。
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 个字符,它将复制 3 个字符。 index + 1
表示在 index
指向的字符 1 之后指向字符 1。
你不能在 Java 中使用指针。您可以使用String
方法(如 subString(int startIdx, int endIdx)
)提取子字符串以分配给 handCeil 和 handFloor。我宁愿将它们保留为 Java String
。如果以后您需要访问单个字符,您可以通过charAt(int idx)
方法进行操作。
将 1 添加到字符*(指针)会使指针增加一个字符。
因此,在提供的代码中,由于索引指向 handText 中的"-",因此递增它将导致指针现在指向下一个字符。
(顺便说一句,提供的C++代码根本不安全,并且会导致许多可能的 handText 值出现重大错误,例如"这是一个字符串-;)"。
代码段调用未定义的行为。
const char* handText;
const char* index = strchr(handText, '-');
handText
是一个未初始化的指针常量。将其作为参数传递给strchr
调用 UB。 strchr
返回指向handText
中第一次出现的-
的指针,但handText
没有指向任何位置或垃圾。