c++ char*数组长度怎么获取
时间: 2023-11-25 15:08:43 浏览: 42
可以使用标准库函数 `strlen` 来获取一个以 null 结尾的 char* 数组的长度。例如:
```c++
char str[] = "hello";
int len = strlen(str); // len = 5
```
需要注意的是,如果 char* 数组没有以 null 结尾,那么 `strlen` 函数会导致未定义行为。
相关问题
C++ unsigned char*数组转ascii字符串
可以使用以下代码将一个 `unsigned char` 类型的数组转换为 ASCII 字符串:
```cpp
unsigned char arr[] = { 72, 101, 108, 108, 111, 33 }; // Hello!
int len = sizeof(arr) / sizeof(unsigned char);
char str[len+1];
for (int i = 0; i < len; i++) {
str[i] = static_cast<char>(arr[i]);
}
str[len] = '\0';
std::cout << str << std::endl; // Output: Hello!
```
在上面的代码中,我们首先定义了一个 `unsigned char` 类型的数组 `arr`,其中包含 ASCII 字符串 "Hello!" 的每个字符的 ASCII 编码。然后,我们计算数组的长度并使用 `char` 类型的数组 `str` 来存储 ASCII 字符串。接下来,我们使用循环遍历 `arr` 数组中的每个元素,并将其转换为 `char` 类型并存储到 `str` 数组中。最后,我们在 `str` 数组的末尾添加一个空字符 '\0',以确保它是一个有效的 C 风格字符串,并在控制台上输出它。
jni copy char* 数组数据到JByteArray中
要将JNI中的char*数组数据复制到Java中的JByteArray中,可以按照以下步骤进行操作:
1. 获取char*数组数据的长度,使用sizeof()函数可以获取。
2. 创建一个JByteArray类型的Java数组,长度为char*数组长度,使用NewByteArray()函数可以创建。
3. 将char*数组数据复制到JByteArray类型数组中,使用jbyte*类型的指针指向char*类型数组,然后使用SetByteArrayRegion()函数将每个char类型元素转换为jbyte类型并设置到Java数组中。
4. 释放char*类型数组的内存空间,使用free()函数释放。
下面是一个示例代码:
```c++
JNIEXPORT jbyteArray JNICALL Java_com_example_MyClass_copyCharArrayToJByteArray(JNIEnv *env, jobject obj, jcharArray charArray) {
// 将jcharArray类型转换为jchar类型指针
jchar *chars = env->GetCharArrayElements(charArray, NULL);
// 获取char*数组数据的长度
int len = sizeof(chars);
// 创建JByteArray类型的Java数组
jbyteArray byteArray = env->NewByteArray(len);
// 将char*数组数据复制到JByteArray类型数组中
jbyte *bytes = (jbyte*)chars;
env->SetByteArrayRegion(byteArray, 0, len, bytes);
// 释放char*类型数组的内存空间
free(chars);
// 返回JByteArray类型的Java数组
return byteArray;
}
```
在示例代码中,我们首先将输入的jcharArray类型转换为jchar类型指针,然后获取char*数组数据的长度。接着,我们使用NewByteArray()函数创建一个长度为char*数组长度的JByteArray类型的Java数组。然后,我们将jchar类型指针转换为jbyte类型指针,并使用SetByteArrayRegion()函数将每个char类型元素转换为jbyte类型并设置到Java数组中。最后,我们使用free()函数释放char*类型数组的内存空间,并返回JByteArray类型的Java数组。