2011-05-18 12 views
2

我需要將一些代碼從C++轉換爲java,我不太清楚如何處理'const char *'運算符。檢查下面的代碼:幫助理解const char *運算符在C++中

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]; 

不過,我不知道這意味着什麼,當你添加整數(指數+ 1),或當你減去( index - handText)C++中的字符串。對不起,如果這是一個愚蠢的問題,但我從來沒有學過如何用C++編程,只用java編程。謝謝。

+1

我不完全確定你的問題,但你沒有在C++中使用「字符串」,你在C++中使用char * ...如果你想在C++中使用字符串,以Java的形式出現)#include 並使用該方法。 – Dair 2011-05-18 02:35:17

回答

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

你不能在Java中使用指針。您可以使用String方法(如subString(int startIdx, int endIdx))提取出要分配給handCeil和handFloor的子字符串。我寧願將它們保留爲Java String。如果以後你需要訪問單個字符,則可以通過charAt(int idx)方法進行操作。

1

向char添加一個*(指針)將指針增加一個字符。

因此,在提供的代碼中,由於index指向handText中的' - ',所以遞增它會使指針現在指向下一個字符。

(順便說一句,在C++提供的代碼是不是在所有的安全的並會導致顯著誤差的handText的許多可能的值,如「這是一個與字符串」;)

1

該片段調用未定義的行爲

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

handText是一個未初始化的指針常量。將它作爲參數傳遞給strchr將調用UB。 strchr返回handText-的第一個發生的指針,但handText指向沒有地方或垃圾。

+0

對不起,我誤寫了代碼,但handText在理論上是這個函數的輸入之一。儘管如此,你仍然是正確的。 – 2011-05-18 02:59:09

+0

@佩德羅西米尼 - 沒什麼好抱歉的:)我以爲你可能沒有意識到這一點,但很高興你真的知道它。 – Mahesh 2011-05-18 03:28:59