【问题标题】:getenv() segmentation faultgetenv() 分段错误
【发布时间】:2014-12-07 21:24:32
【问题描述】:

我必须做我的功课,但我不能在 C 中走路径。例如 ;

int main(void) {
  char *path;
  path = getenv("PATH");
  if(path)
    printf("The current path is: %s\n", path);
  return 0;
}

如果我运行此代码,我会收到“分段错误(核心转储)”。我的操作系统是 Ubuntu 14.04 LTS。

【问题讨论】:

  • 你已经通过gdb了吗?
  • 上面的代码对我来说很好用。您确定这可以重现您的问题吗?
  • 不要忽略来自编译器的警告——它们会准确地告诉你问题所在。使用-Wall 获得更多警告(并注意它们)也是一个好主意。

标签: c getenv


【解决方案1】:

添加

#include <stdlib.h>

到列表顶部并尝试一下。这可能是 getenv 到 char * 指针的假定 int 返回,导致代码出错。

【讨论】:

  • 如果这是问题所在,那么stdio.h 也需要为#included 以及printf
  • 我自己试过了,确实在添加那行之后就可以了。
  • 它与符号扩展 64 位值有关。在 printf 中使用 %p,您会看到 'pointer variable: 0xffffffffa30d6982' Segmentation fault (core dumped) 地址 0x7fffffffx30d6982 由于返回假设而被错误地转换。也就是正确声明getenv。包括 stdio.h 并不能真正帮助解决 getenv 的错误转换,但无论如何它都是聪明而正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多