我需要将一些代码从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];
但是,当你添加整数(index + 1)或者在c ++中减去(index - handText)字符串时,我不知道它意味着什么。很抱歉,如果这是一个愚蠢的问题,但我从未学过如何用c ++编程,只在java中编程。谢谢。
答案 0 :(得分: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个字符,则会复制3个字符。
index + 1
表示指向index
指向的字符后的字符1。
答案 1 :(得分:1)
你不能在Java中使用指针。您可以使用String
方法(例如subString(int startIdx, int endIdx)
)来提取子字符串以分配给handCeil和handFloor。我希望将它们保留为Java String
。如果稍后您需要访问单个字符,则无论如何都可以通过charAt(int idx)
方法执行此操作。
答案 2 :(得分:1)
将一个添加到char *(指针)会使指针增加一个char。
因此,在提供的代码中,由于索引指向handText中的“ - ”,递增它将导致指针现在指向下一个字符。
(顺便说一句,所提供的C ++代码根本不安全,会对handText的许多可能值造成重大错误,例如'this is a string-'.;)
答案 3 :(得分:1)
该代码段调用未定义的行为。
const char* handText;
const char* index = strchr(handText, '-');
handText
是未初始化的指针常量。将其作为参数传递给strchr
会调用UB。 strchr
返回-
handText
中handText
第一次出现的指针,但{{1}}指向无处或无垃圾。