ポインタ配列
"one","two","three","four","five","six","seven","eight","nine","ten" のポインタ配列の文字列を、ASCIIコード順に並べ変えようと思ったのですが、
もうどこが間違っているかさえわからないぐらいになってしまいました。
まだまだはじめたばかりなもので、わからないことだらけなんで、
できるだけわかりやすい説明おねがいします。
関数の引数に問題があるのじゃないかと思ったのですが、
何かいいアドバイスありましたら、お願いします。
#include <stdio.h>
/* 関数のプロトタイプ宣言 */
int strmp(char *,char *);
void cpy(char *,char *);
int main (void)
{
/* ポインタ配列の定義 */
char *x[10]={"oneee","twooo","three","fourr","fivee","sixxx","seven","eight","ninee","tennn"};
/* ポインタのポインタの定義 */
char **pp=x;
char k[100];
char *p=k;
int i,t,a,b,c,d;
a=0;
/* ポインタ配列を自作関数を使って、ASCIIコードの大きいほうからに並び替える */
for(i=0;i<9;i++)
{
for(t=1;t<10;t++)
{
a=strmp(*(pp+i),*(pp+t));
if(a<0)
{
cpy(p,*(pp+i) );
cpy(*(pp+i),*(pp+t) );
cpy(*(pp+t),p);
}
}
}
for(i=0;i<10;i++)
{
printf("%s ,",x[i]);
}
printf("\n");
return 0;
}
/* 文字の比較をする関数 */
int strmp(char *x,char *y)
{
int i;
for(i=0;*(x+i)==*(y+i);i++)
{
if( *(x+i)=='\0')
{
return 0;
}
}
return *(x+i)-*(y+i);
}
/* 文字をコピーする関数 */
void cpy(char *a,char *b)
{
int i;
for(i=0;*(b+i)!='\0';i++)
{
*(a+i)=*(b+i);
}
*(a+i)='\0';
}
お礼
今試してみました. そうですよね・・・[10]が必要でした. ありがとうございます!