gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:56:16 26 4
gpt4 key购买 nike

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

这是《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,但我遇到了很多这样的障碍,我感到很沮丧。

最佳答案

实际问题是

++lenOfWord[charCount];
charCount = 0;

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

charCount = 0;

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

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

您还必须检查一件事。由于数组大小为MAXIMUM。因此,您必须检查 charCount 不超过 MAXIMUM。否则,它会再次出现段错误

另一个问题是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++)

否则你将不会得到任何输出。

关于c - 为什么在 C 中显示数组时总是出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26496308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com