2016-05-15 11 views
-1

プログラムは文字列を受け取って、各文字がどのくらいの頻度で記述されているかを確認する必要があります。このコードを実行しようとすると、cmdが閉じます

私は読書の文字列のコードを追加する前にそれをテストしてきたし、それが働いていたが、それは何ではありません、これまで(私は、この段階で手紙Aをチェックします)

int main(int argc, char const *argv[]) 
{ 
    int i=0; 
    int l,k; 
    int r=10; 
    char list[10][10] ; 
    /* recieve a strng*/ 
    char str[10] ; 
    fgets(str, 10, stdin); 
    str[10] = 0; 

    /*initialise list[] to -'s */ 
    for (l = 0; l < 10; l++) { 
     for(k=0; k<10; k++) { 
      list[l][k]='-' ; 
     } 
     printf("\n"); 
    } 

    /*checks if the letter== "A" if yes replace with * */ 
    for (i = 0; i < 10 ; ++i) { 
     if (str[i]== 97) { 
      list[r][0]='*'; 
      r--; 
     } 
    } 

    /*print the second list[] */ 
    for (l = 0; l < 10; l++) { 
     for(k=0; k<10; k++) { 
      printf("%c ", list[l][k]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

ずっとこれを行ってきました私は欲しかった:/

char list[10]; 
fgets(str, 10, stdin); 
str[10] = 0; 

私はそれを再び働かせるために焦点を当てるべきですか? 私は何が間違っていますか?私はそれがここに

list[r][0]='*'; 

である見るよう

答えて

3

問題は、rの値は、アウトオブバウンドアクセスである、10です。それはundefined behaviorを呼び出します。

Cアレイは0ベースのインデックスを使用することを覚えておいてください。 if (str[i] == 97)は非常にポータブルなアプローチではないようなので、

int arr[10] = {0}; 

のような配列のために有効なインデックスは、文字の直接のASCII値を使用して、それとは別に9

に0になります。あなたはより良いためにif (str[i] == 'A')を使用する必要があります。

あなたのコードのロジックについてはあまりよく分かりませんが、それはどの角度からでもを意図しています。

関連する問題