Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
printf和getenv错误-应为char*,但参数2的类型为int_C_Environment Variables - Fatal编程技术网

printf和getenv错误-应为char*,但参数2的类型为int

printf和getenv错误-应为char*,但参数2的类型为int,c,environment-variables,C,Environment Variables,如果getenv应该返回一个指向环境中的值的指针,那么这个程序不应该打印出环境变量的字符串值吗 #include <stdio.h> #include <unistd.h> int main() { printf("HOME=%s\n",getenv("HOME")); return 0; } 当我运行程序时,我得到一个分段错误 我正在使用Ubuntu,我想知道这是否与权限或其他形式的安全性有关。您需要#include,因为这就是声明getenv()的

如果getenv应该返回一个指向环境中的值的指针,那么这个程序不应该打印出环境变量的字符串值吗

#include <stdio.h>
#include <unistd.h>

int main() {

   printf("HOME=%s\n",getenv("HOME"));

   return 0;
}
当我运行程序时,我得到一个分段错误

我正在使用Ubuntu,我想知道这是否与权限或其他形式的安全性有关。

您需要
#include
,因为这就是声明
getenv()
的地方

也可以考虑使用<代码>墙>代码>选项,以使GCC或MSVC(或大多数编译器)能够进行更多的诊断。在这种情况下,gcc会说:

warning: implicit declaration of function 'getenv' [-Wimplicit-function-declaration]
warning C4013: 'getenv' undefined; assuming extern returning int
MSVC会说:

warning: implicit declaration of function 'getenv' [-Wimplicit-function-declaration]
warning C4013: 'getenv' undefined; assuming extern returning int

#include
I应该包含的东西#另外,getenv()可以返回空指针,因此在将返回代码传递给printf()Right之前,需要检查错误条件。在调用函数之前,编译器需要知道函数的原型,否则编译器将假定默认函数原型,即int函数(int,int)。这可能就是主题海报遇到这种警告的原因。感谢我在编译时尝试的墙提示,我得到了您显示的输出警告。这非常有帮助。@Bridenstine:看,但一定要读乔纳森·莱夫勒的警告。有关规格文件的详细信息,请参见。我认为如果makefile正在运行构建,只需将选项添加到
CFLAGS
变量中(或者对于您正在使用的任何构建工具,添加类似的选项)。如果您在命令行上手动运行编译器,我认为大多数人使用脚本或别名来运行编译器。比如: