帮助理解c ++中的const char *运算符

时间:2011-05-18 02:26:51

标签: java c++ string operators translation

我需要将一些代码从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中编程。谢谢。

4 个答案:

答案 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返回- handTexthandText第一次出现的指针,但{{1}}指向无处或无垃圾。