C/C++中的getenv()函数

声明在<stdlib.h>标准库中
函数声明如下:

char *getenv(const char *name)

函数名称解析
getenv:get:获取;env:Environment Variable 环境变量
合起来就是获取环境变量
参数
name:被请求变量名称的 C 字符串
返回值
该函数返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL

举例

#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("PATH: %s\n",getenv("PATH"));

return 0;
}

结果

PATH:
D:\DevCpp\MinGW64\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;
。。。。。。。
windows环境下的全部环境变量都出来了
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++代码引用Java API需要使用Java Native Interface(JNI)技术。因此,要在C++代码引用MediaExtractor API,您需要执行以下步骤: 1. 在Java代码编写一个包含MediaExtractor API的类,并将其编译为Java字节码文件(.class文件)。 2. 在Java代码定义一个Native方法,该方法将被C++代码调用,并在该Native方法使用MediaExtractor API。 例如,在Java代码编写以下类和方法: ``` package com.example.myapp; import android.media.MediaExtractor; import android.media.MediaFormat; public class MyMediaExtractor { private MediaExtractor extractor; public MyMediaExtractor(String filePath) { extractor = new MediaExtractor(); extractor.setDataSource(filePath); } public void extractAudioData() { int trackCount = extractor.getTrackCount(); for (int i = 0; i < trackCount; i++) { MediaFormat format = extractor.getTrackFormat(i); String mime = format.getString(MediaFormat.KEY_MIME); if (mime.startsWith("audio/")) { extractor.selectTrack(i); // 从音频轨道提取数据 ... } } } public static native void nativeExtractAudioData(String filePath); } ``` 在上面的代码,我们定义了一个名为MyMediaExtractor的Java类,该类包含了一个使用MediaExtractor API提取音频数据的方法extractAudioData()。我们还定义了一个名为nativeExtractAudioData()的Native方法,该方法将被C++代码调用,并在该方法调用Java方法extractAudioData()。 3. 将Java字节码文件(.class文件)编译为可执行的动态链接库(.so文件)。 在命令行使用以下命令将Java字节码文件编译为动态链接库: ``` javac com/example/myapp/MyMediaExtractor.java javah -jni com.example.myapp.MyMediaExtractor gcc -I<path to jni.h> -I<path to jni_md.h> -shared -o libmyapp.so com_example_myapp_MyMediaExtractor.c ``` 在上面的命令,我们使用javac命令编译Java字节码文件,使用javah命令生成C++头文件,然后使用gcc命令将Java字节码文件编译为动态链接库。 4. 在C++代码加载动态链接库并调用Native方法。 在C++代码,您可以使用以下代码加载动态链接库并调用Native方法: ``` #include <jni.h> JNIEnv* getJNIEnv() { JavaVM* jvm; JNIEnv* env; int envStatus = jvm->GetEnv((void**)&env, JNI_VERSION_1_6); if (envStatus == JNI_EDETACHED) { jvm->AttachCurrentThread(&env, NULL); } return env; } void extractAudioData(const char* filePath) { JNIEnv* env = getJNIEnv(); jclass clazz = env->FindClass("com/example/myapp/MyMediaExtractor"); jmethodID methodID = env->GetStaticMethodID(clazz, "nativeExtractAudioData", "(Ljava/lang/String;)V"); jstring jFilePath = env->NewStringUTF(filePath); env->CallStaticVoidMethod(clazz, methodID, jFilePath); env->DeleteLocalRef(jFilePath); } ``` 在上面的代码,我们使用getJNIEnv()函数获取JNIEnv指针,然后使用FindClass()函数查找Java类,使用GetStaticMethodID()函数获取Native方法ID,使用NewStringUTF()函数创建一个Java字符串对象,并使用CallStaticVoidMethod()函数调用Native方法。最后,我们使用DeleteLocalRef()函数释放Java字符串对象的内存。 这就是在C++代码引用MediaExtractor API的基本步骤。请注意,在使用JNI调用Java API时,请确保在正确的线程上执行Java代码,并避免内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值