2016-11-11 25 views
0

我的代码创建了一个由3个字符串组成的数组,并尝试使用getline()填充每个字符串。它还打印每次得到的字符串:在循环中使用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]); 
}  

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

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

+2

您在words'的'的声明,具有'*'其中意味着有一个或多个指针参与,但你没有把它们指向任何东西。 –

+0

我认为这可能实际上也被解释为一个函数指针。 – SenselessCoder

+1

@ n.m。如果指针初始化为NULL,'getline'将执行此操作。 – mch

回答

3

你必须根据man page申报words作为指针的阵列,并且将其初始化为NULL

char *words[3] = {NULL}; 

http://ideone.com/GxV9qy

+0

引起混淆的一件事是,我在Linux终端上运行man 3 getline的阅读手册页略有不同。它要求'n'为0,而你提到的手册页说'n'被忽略。 – Sfou