文字に対応する数を割り当て、数の大きい順に並べ替えるプログラムを
作りたいのですが、以下のプログラムを実行すると
#include <stdio.h> #include <math.h> #include <ctype.h> int main() { size_t size = pow(2, 8); int a[size]; char c; int i; a[65] =3; a[66] =8; a[67] =5; a[68] =10; a[69] =2; for(i=65; i<=69; i++) { printf("%c %d\n", (char)i, a[i]); } return 1; }
A 3
B 8
C 5
D 10
E 2
と出力されます。これを
D 10
B 8
C 5
A 3
E 2
と大きい順に並べ替えて表示させようと以下のようにプログラムを変更し、
実行しましたが、
#include <stdio.h> #include <math.h> #include <ctype.h> int main() { size_t size = pow(2, 8); int a[size],b[size]; char c; int i,j,k,d; a[65] =3; a[66] =8; a[67] =5; a[68] =10; a[69] =2; for(i=65; i<=69; i++) { printf("%c %d\n", (char)i, a[i]); } for(j=65;j<=69;j++){ for(k=j+1;k<=69;k--){ if(a[k-1]<a[k]){ b[k-1]=a[k]; b[k]=a[k-1];} } printf("%d\n",b[j]); } return 1; }
Segmentation fault (core dumped) となります。
D 10
B 8
C 5
A 3
E 2
と出力させるにはどう直せばよいか、ご存じの方よろしくお願い致します
配列の範囲外を使っているので、いつクラッシュしてもおかしくないです。
int a[10];の範囲は、a[0]からa[9]までです。
--------------
t3.c:12:5: warning: array index 65 is past the end of the array (which contains 10 elements) [-Warray-bounds]
a[65] =3;
^ ~~
t3.c:8:3: note: array 'a' declared here
int a[10];
^
--------------------
ありがとうございます。
size_t size = pow(2, 8);
int a[size],b[size];
と変更しましたが、
A 3
B 8
C 5
D 10
E 2
Segmentation fault (core dumped)
となり
D 10
B 8
C 5
A 3
E 2
とは表示されませんでした。
回答1件
あなたの回答
tips
プレビュー