使用switch-C后,简单程序崩溃

时间:2016-11-07 09:51:03

标签: c if-statement for-loop switch-statement

我刚刚写了一个程序,假设返回最多/最少的char。在没有switch语句的测试期间编程工作,但是当我添加它时开始崩溃。你能来看看吗?

  

主要功能

#include <stdio.h>
#include <stdlib.h>
#include "tools.h"

int main(int argc, char *argv[]) {
    int count[256] = { 0 };
    int c;
    while ( (c=getchar())!=EOF ){
        count[c]++;
    }
    switch (argv[1][1]) {
    case 'm': case 'M':
        mostOften(count);
        break;
    case 'l': case 'L':
        leastOften(count);
        break;
    default:
        mostOften(count);
        break;
    }
    return 0;
}
  

工具功能

#include <stdio.h>
#include <stdlib.h>
#include "tools.h"

void mostOften(int *s) {
    int j;
    int max, cha;
    for(j=32; j<126; j++){
        if(s[j]>max) {
                max=s[j];
                cha=j;
        }
    }
    printf("char %c: %d times\n", cha, max);
}

void leastOften(int *s) {
    int j;
    int min=10000, cha;
    for(j=32; j<126; j++){
        if(s[j] && s[j]<=min) {
                min=s[j];
                cha=j;
        }
    }
    printf("char %c: %d times\n", cha, min);
}

1 个答案:

答案 0 :(得分:3)

您正在使用max未初始化,因此,阅读垃圾:

int max, cha;
for(j=32; j<126; j++){
    if(s[j]>max) {

此外,在使用之前,您需要检查argv[1][1]是否存在:

switch ((argc > 1 && argv[1][0]) ? argv[1][1] : 0) {