-1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <math.h>

// Here i declared global variables.
int repLetters[26];
char* letters1;

static void makeRepLetters()
{
    printf("enter makeRep");
    int i =0;
    for(;i<26;i++)  
        repLetters[i] =0;
    for(i=0;i<26;i++) {
        repLetters[((letters1[i]) - 97)] +=1; 
    }
}      

int main(int argc, char *argv[])
{
    int i=0,num =10;
    if(argc != 2) {
        printf("Usage: %s <letters>\n", argv[0]);
        return 1;
    }
    //letters1 = (char*)malloc(sizeof(char)* strlen( argv[1]));
    //strcpy(letters1,argv[1]); 
    letters1 = argv[1];
    printf("\n letters1 = %s",letters1);
    scanf("%d",&num);
    printf("\ncheck test\n");

    makeRepLetters();
    for(i=0;i<26;i++)
        printf("\n %c occured %d tyms",i+97,repLetters[i]);
    return 0;
}

「check test」を印刷した後、バスエラーが発生します。makeRepLettersが呼び出されていません。私は多くのことを変更しようとしましたが、それを機能させることができませんでした。

4

1 に答える 1

1

クラッシュの可能性が最も高いのは次の場所です。

repLetters[((letters1[i]) - 97)] +=1;

letters126 文字が含まれていない場合はどうなりますか? 範囲外の配列にアクセスしています。

確実に知る唯一の方法は、デバッガーでプログラムを実行することです (クラッシュが発生した場合は常に実行する必要があります)。

于 2013-04-04T04:07:34.597 に答える