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

发布于 2024-11-07 13:42:23 字数 547 浏览 2 评论 0原文

我需要将一些代码从 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++ 中添加整数 (index + 1) 或减去 (index - handText) 字符串时这意味着什么。抱歉,如果这是一个愚蠢的问题,但我从未学过如何用 C++ 编程,只学过 Java。谢谢。

I need to translate some code from c++ to java, and I am not so sure how to deal with the 'const char*' operators. Check code below:

const char* handText;
const char* index = strchr(handText, '-');
char handCeil[4];
char handFloor[4];
strncpy(handCeil, handText, index - handText);
strcpy(handFloor, index + 1);

What I got is something like:

String handText;
String index = handText.substring(handText.indexOf('-'));
char handCeil[4];
char handFloor[4];

However, I don't know what it means when you add integers (index + 1), or when you subtract (index - handText) strings in c++. Sorry if this is a stupid question, but I never learned how to program in c++, only in java. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清风挽心 2024-11-14 13:42:23

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之后的字符。

This

strncpy(handCeil, handText, index - handText);
strcpy(handFloor, index + 1);

is equivalent to

int index = handText.indexOf('-'); // I changed this for you
handCeil = handText.substring(0, index+1);
handFloor = handText.substring(index+1);

So it splits the string by the '-' and puts the first part (including the '-' itself, I think) into handCeil and the remainder into handFloor.

index - handText means this: index points to a specific character, handText points to the beginning of that string. If you subtract the two then you get the number of characters between those two pointers, or the array index of the first '-'. strncpy copies n bytes, so if index points to the 3rd character it will copy 3 characters.
index + 1 means point to the character 1 after the one pointed to by index.

哽咽笑 2024-11-14 13:42:23

在 Java 中你不能乱用指针。您可以使用 String 方法,例如 subString(int startIdx, int endIdx) 提取子字符串以分配给 handCeil 和 handFloor。我更喜欢将它们保留为 Java String。如果稍后您需要访问单个字符,您仍然可以通过 charAt(int idx) 方法来完成。

You cannot muck around with pointers in Java. Either you use String methods such as subString(int startIdx, int endIdx) to extract out substring to assign to handCeil and handFloor. I would prefer keeping them as Java String. If later you need to access the individual characters you could do it anyways through charAt(int idx) method.

久伴你 2024-11-14 13:42:23

向 char*(指针)加 1 会使指针增加一个字符。

因此,在提供的代码中,由于索引指向 handText 中的“-”,因此递增它将导致指针现在指向下一个字符。

(顺便说一句,提供的 C++ 代码一点也不安全,并且会导致 handText 的许多可能值出现严重错误,例如“这是一个字符串-”。;)

Adding one to a char* (pointer) increments the pointer one char.

So in the code provided, since index points to the '-' in handText, incrementing it will cause the pointer to now point to the next character.

(BTW, the C++ code provided isn't at all secure and will cause significant errors for many possible values of handText, like 'this is a string-'. ;)

最好是你 2024-11-14 13:42:23

该代码片段调用未定义的行为

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

handText 是一个未初始化的指针常量。将其作为参数传递给 strchr 会调用 UB。 strchr 返回指向 handText 中第一次出现 - 的指针,但 handText 没有指向任何位置或垃圾。

The snippet invokes undefined behavior.

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

handText is an uninitialized pointer constant. Passing it as a parameter to strchr invokes UB. strchr returns the pointer to the first occurence of - in handText but handText is pointing no where or garbage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文