【问题标题】:C program freezes for word lengths greater than 6C 程序因字长大于 6 而冻结
【发布时间】:2015-05-27 22:56:22
【问题描述】:

我正在完成 K&R 的第一章,并开始练习你应该为某些输入创建一个字长直方图。我首先尝试使用一个while循环来创建一个与最长单词一样长的零数组,但是输入的单词长度超过六个字符会导致程序冻结。我对解决方案的兴趣不如对原因的了解。

#include <stdio.h>

main()
{
int c, i, l, max;
int length[max];

l = max = 0;

    while((c = getchar()) != EOF){
        if(c != ' ' && c != '\t' && c != '\n'){
            ++l;
            if(l > max)
               max = l;
             else
                 ;
             }
        else
            l = 0;
        }
    for(i = 0; i < max; ++i)
        length[i] = 0;

    for(i = 0; i < max; ++i)    
        printf("\n%d", length[i]);
        putchar('\n');
}

【问题讨论】:

  • 这是怎么编译的?数组的大小未初始化。

标签: c kernighan-and-ritchie


【解决方案1】:

max 在定义length[max] 时未初始化。本质上,您使用的是未分配的内存。

【讨论】:

  • 好的,所以我在定义 max 的循环之后初始化了 length[max] 并且它工作得很好。这是否意味着程序在 6 个字符后试图吞噬一些不允许的内存或什么?
  • @Fittesbane - 我猜,但总是很难判断缓冲区何时溢出。
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多