为什么在C中显示数组时总是会出现分段错误?

时间:2014-10-21 21:05:38

标签: c arrays fault

我尝试过如此多的代码试图在直方图中显示我的数据。我已经被困在这个问题上两天了,数据爬行互联网等等找到答案,但他们通常会谈论指针等。而这是更基本的。我尝试过显示相同错误的实际直方图,但为了保持简单,我选择发布这个。

这是C编程语言中程序的描述: “编写一个程序来打印输入中单词长度的直方图。” 我正在水平做,然后我会垂直做。虽然,在这个例子中,我只是试图显示数字,显然。

#include <stdio.h>
#define MAXIMUM 99


main()
{
int i, c, j, lenOfWord[MAXIMUM], charCount;

for (i = 0; i < MAXIMUM; i++)
    lenOfWord[i] = 0;


printf("Starting program, please type then ctrl+d\n");



while((c = getchar()) != EOF) {
    if (c == ' ') {
        //new word
        ++lenOfWord[charCount];
        charCount = 0;
    }
    else
        //inword
        ++charCount;
}

printf("\n Displaying now... \n");


for (j = 0; j <= MAXIMUM; j++)
    printf("%d: %d", j, lenOfWord[j]); 


}

输出:

 JohnJackson@linux-72db:~/Desktop> gcc c.c -o c
 JohnJackson@linux-72db:~/Desktop> ./c
 Starting program, please type then ctrl+d
 Hello my name is john jacksonSegmentation fault

*当我执行EOF(ctrl + D)

时,最终会出现分段错误

附加信息:来自openSUSE linux终端的GCC编译器

非常感谢,我正在努力学习C但是我已经打了很多这样的路障,我感到很沮丧。

2 个答案:

答案 0 :(得分:2)

实际问题是

++lenOfWord[charCount];
        charCount = 0;

在使用之前,您尚未将charCount初始化为0。首先在循环之前将其初始化为0

charCount = 0;

while((c = getchar()) != EOF) {

在循环中将charCount分配给0是没有用的。删除它。

你还要检查一件事。由于数组大小为MAXIMUM。因此,您必须检查charCount是否超过MAXIMUM。否则,它将再次提供segmentation fault

另一个问题是for循环条件。而不是

for (i = 0; i < MAXIMUM; i++)

将其更改为

for (i = 0; i < MAXIMUM; i++)

而不是

for (j = 0; j >= MAXIMUM; j++)

for (j = 0; j < MAXIMUM; j++)

否则你将无法获得任何输出。

答案 1 :(得分:0)

您的charCount变量未初始化