帮助理解 C++ 中的常量字符* 运算符
Help understanding const char* operators in c++
我需要将一些代码从 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++ 中添加整数(索引 + 1)或减去(索引 - handText)字符串时是什么意思。对不起,如果这是一个愚蠢的问题,但我从未学过如何用 c++ 编程,只学过 java。谢谢。
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 添加到字符*(指针)会使指针增加一个字符。
因此,在提供的代码中,由于索引指向 handText 中的"-",因此递增它将导致指针现在指向下一个字符。
(顺便说一句,提供的C++代码根本不安全,并且会导致许多可能的 handText 值出现重大错误,例如"这是一个字符串-;)"。
代码段调用未定义的行为。
const char* handText;
const char* index = strchr(handText, '-');
handText
是一个未初始化的指针常量。将其作为参数传递给strchr
调用 UB。 strchr
返回指向handText
中第一次出现的-
的指针,但handText
没有指向任何位置或垃圾。
- 如何循环访问常量字符**?
- constexpr 函数获取常量字符*
- 如何计算常量字符**中的总字符数?
- QDial:如何将 int 值传递给需要常量字符*的 Qfile?
- 为什么 std::string_view 比常量字符*快?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 在编译时将常量字符* 转换为常量 char_type*
- 将字符串数组传递给接受常量字符**的函数
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 字符串强制转换为常量字符*
- 使用常量字符*时退出代码 139
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法<string>从"常量字符 []"转换为<类名>
- 初始化常量字符* 数组
- 常量字符*的性质是什么?
- C++ 获取向量中常量字符* [ ] 的长度
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- C++将常量字符* 指针数组传递给对象