Помогите понять операторы const char * в c ++ - PullRequest
2 голосов
/ 18 мая 2011

Мне нужно перевести некоторый код из 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) или когда вычитаете (index - handText) строки в c ++. Извините, если это глупый вопрос, но я никогда не учился программировать на c ++, только на java. Спасибо.

Ответы [ 4 ]

3 голосов
/ 18 мая 2011

Это

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 означает указатель на символ 1 после того, на который указывает index.

1 голос
/ 18 мая 2011

Фрагмент вызывает неопределенное поведение .

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

handText - константа неинициализированного указателя.Передача его в качестве параметра в strchr вызывает UB.strchr возвращает указатель на первое вхождение - в handText, но handText указывает не куда или мусор.

1 голос
/ 18 мая 2011

Добавление одного к символу * (указатель) увеличивает указатель на один символ.

Таким образом, в предоставленном коде, так как индекс указывает на '-' в handText, при увеличении его указатель будет теперь указывать на следующий символ.

(Кстати, предоставленный код C ++ совсем не безопасен и вызовет значительные ошибки для многих возможных значений handText, например, «this is string-».;)

1 голос
/ 18 мая 2011

Вы не можете возиться с указателями в Java. Либо вы используете String методы, такие как subString(int startIdx, int endIdx), чтобы извлечь подстроку для присвоения handCeil и handFloor. Я бы предпочел сохранить их как Java String. Если позже вам понадобится доступ к отдельным персонажам, вы можете сделать это в любом случае с помощью метода charAt(int idx).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...