2015-10-17 58 views
1

我想在二维指针数组中存储句子列表。下面的代码给出了循环evlauted刚过分段错误(我查了printf语句;循环内不含语句执行):使用fgets时的分段错误()

int main(int argc, char** argv){ 

    char *inputarray[MAX_LINE]; 
    int count = 0; 

    //char cpy[MAX_LENGTH] <---- This one doesn't work either                                                              
    char *cpy = (char*) calloc (MAX_LENGTH, sizeof(char)); 

    while (count <= MAX_LINE && fgets(cpy, MAX_LENGTH, stdin)){ 

    int str_len = strlen(cpy); 
    cpy[--str_len] = '\0'; 

    inputarray[count++] = reverse(cpy, str_len); 

    } 

    printOutput(inputarray, count); 

    return 0; 

}

一直试图调试为3小时以上现在没有用。帮助任何人?

+2

什么是MAX_LENGTH?你在为此付出什么?你能显示输入的第一个MAX_LENGTH + 1个字符吗? – Kalle

+0

[mcve]是必需的。 –

+0

你能展示什么是逆向功能吗?其他一些注意事项:1)不要投入calloc的返回(使用c时)。它可以掩盖重要的警告,并且没有必要2)fgets将已经null结束字符串,但它看起来像是截断了输入的最后一个字符,这是故意的吗? –

回答

1

您只分配了指向char的指针数组的MAX_LINE元素。

  • 由于数组索引从0开始。
  • 使用条件(count < MAX_LINE),而不是(count <= MAX_LINE

例: 假设你已经分配*inputaray[5]; 这是什么情况,

count=0; //1st sentence 
count=1; //2nd sentence 
count=2; //3rd sentence 
count=3; //4th sentence 
count=4; //5th sentence 

在上面的代码,

count=5; //which is <=5 

并因此尝试将输入字符串存储到一个inv alid记忆。

+0

我认为我的回答是正确的。但我是新来的Stackoverflow回答。 –

+0

好的,继续。但我的答案+1。 –

+0

只需自己修改一下'inputarray'不是'char数组'。它是他声明的“指向char的指针数组”。 – ameyCU