前提・実現したいこと
C言語で宣言した配列をアルファベット順にソートをしたいです。
また、strcmp関数を使わずに解きたいです。
発生している問題・エラーメッセージ
実行してみると文字列が消えたり違う文字列になります。
**** Before calling namesort ****
name
SAZAE
WAKAME
MASUO
NORISUKE
TARACHAN
KATSUO
NAMIHEI
**** After calling namesort ****
name
SAZAE CHAN
HAN
UO E MIHEI
該当のソースコード
C言語
1//配列の中身をソートするプログラム 2#include <stdio.h> 3void namesort(char *psmeibo[], int ikosu){ 4 int i, j; 5 char *temp; 6 for(i = 0; i < ikosu; i++){ 7 for(j = 1; j < ikosu; j++){ 8 if(psmeibo[i] > psmeibo[j]){ 9 temp = *(psmeibo + i); 10 *(psmeibo + i)= *(psmeibo + j); 11 *(psmeibo + j) = temp; 12 } 13 } 14 } 15} 16 17//メインプログラム 18#include <stdio.h> 19 20#define NAMELNG 9 21#define NAMECNT 7 22 23 static char meibo[NAMECNT][NAMELNG] = { 24 "SAZAE ", 25 "WAKAME ", 26 "MASUO ", 27 "NORISUKE", 28 "TARACHAN", 29 "KATSUO ", 30 "NAMIHEI " 31 }; 32 33void namesort(char *, int); 34 35int main(void) 36{ 37 int i; 38 char *pcw; 39 40 41 (void)printf("**** Before calling namesort ****\n"); 42 (void)printf(" name \n"); 43 for ( i=0 ; i < NAMECNT ; i++ ) 44 { 45 (void)printf(" %-12s\n",meibo[i]); 46 } 47 48 pcw = (char *)meibo; 49 namesort( pcw, NAMECNT ); /* name-sorting function */ 50 51 (void)printf("\n**** After calling namesort ****\n"); 52 (void)printf(" name \n"); 53 for ( i=0 ; i < NAMECNT ; i++ ) 54 { 55 56 (void)printf(" %-12s\n",meibo[i]); 57 } 58 return 0; 59}
試したこと
ポインタを使わず、配列の要素数で指定してもおなじ結果になりました。