printf和getenv错误-应为char*,但参数2的类型为int
如果getenv应该返回一个指向环境中的值的指针,那么这个程序不应该打印出环境变量的字符串值吗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()的
#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
变量中(或者对于您正在使用的任何构建工具,添加类似的选项)。如果您在命令行上手动运行编译器,我认为大多数人使用脚本或别名来运行编译器。比如: