【问题标题】:Segmentation fault when using getline() in a loop在循环中使用 getline() 时出现分段错误
【发布时间】:2017-03-26 05:26:15
【问题描述】:

我的代码创建了一个包含 3 个字符串的数组,并尝试使用 getline() 填充每个字符串。它还打印它得到的每个字符串:

int i;
size_t n = 100;
char (*words[3])[100];
for ( i = 0; i < 3; i++)
{
    getline(&words[i], &n, stdin);
    printf("%s\n",words[i] );
}    

当我在命令行中输入第三个字符串时,出现分段错误。
更重要的是,如果我将 3 替换为 5,则在输入第一个字符串时会出现分段错误。

所以 1) 我怎样才能让程序存储所有 3 或 5 或我给它的任何字符串?和
2) 为什么如果我将 3 替换为 5 我会在第一个字符串上得到错误?

【问题讨论】:

  • 你在words的声明中有一个*,这意味着涉及一个或多个指针,但你没有让它们指向任何东西。
  • 我认为这实际上也可能被解释为函数指针。
  • @n.m.如果指针初始化为NULLgetline 将执行此操作。
  • @SenselessCoder 函数指针由括号内的参数列表指示
  • 您应该会收到一条编译器消息,提示您使用错误的参数类型调用 getline

标签: c loops segmentation-fault getline


【解决方案1】:

您必须将words 声明为指针数组,并根据man page 将其初始化为NULL

char *words[3] = {NULL};

http://ideone.com/GxV9qy

【讨论】:

  • 引起混乱的一件事是我阅读的手册页,在 linux 终端中运行 man 3 getline 略有不同。它要求n 为0,而您提到的手册页指出n 被忽略。
猜你喜欢
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多