C++ 使用getenv()获取线程数时出错
我使用函数getenv()以以下方式获取线程数:C++ 使用getenv()获取线程数时出错,c++,openmp,setenv,getenv,pardiso,C++,Openmp,Setenv,Getenv,Pardiso,我使用函数getenv()以以下方式获取线程数: char* var; var = getenv("OMP_NUM_THREADS"); 我得到以下错误: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 我尝
char* var;
var = getenv("OMP_NUM_THREADS");
我得到以下错误:
'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable
deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
我尝试按照编译器的建议使用_dupenv_,但在同一行中出现了以下错误:
Error 1: argument of type "const char *" is incompatible with parameter of type "char **"
Error 2: too few arguments in function call
我正在Microsoft Visual Studio 2019上运行此代码。虽然完整的代码是不相关的,但这里有一个链接供参考:
代码中可复制的一小部分:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int main(){
using namespace std;
int iparm[64];
char* var;
var = getenv_s("OMP_NUM_THREADS");
if (var != NULL)
sscanf(var, "%d", &num_procs);
else {
printf("Set environment OMP_NUM_THREADS to 1");
exit(1);
}
iparm[2] = num_procs;
return 0;
}
请用不起作用的代码显示a。您是否阅读了
getenv_s
?你传递了错误的参数数量取决于var
和sz
是什么以及它们的初始化方式sz
的值由\u dupenv\u s
设置并不重要,如果(在上面的级别)你真的需要可以使用的OpenMP线程数量,那么所有这些getenv的东西都是在浪费时间!不需要设置OMP_NUM_线程。要了解可使用的线程数,请在代码的外部级别(并行之前)调用omp_get_max_threads()。请显示一个包含不工作代码的线程。是否阅读了forgetenv_s
?你传递了错误的参数数量取决于var
和sz
是什么以及它们的初始化方式sz
的值由\u dupenv\u s
设置并不重要,如果(在上面的级别)你真的需要可以使用的OpenMP线程数量,那么所有这些getenv的东西都是在浪费时间!不需要设置OMP_NUM_线程。要了解可使用的线程数,请在代码的外部级别(并行之前)调用omp_get_max_threads()
char* var;
size_t sz = 10
_dupenv_s(&var, &sz, "OMP_NUM_THREADS");