C言語 単語をASCII順に並び替えたい

実現したいこと

10個の単語one, two, three, ... , ten をASCIIコード順に並び替えるプログラム(C言語)でポインタを使って作りたいです。VScodeです
初学者なので、もしよろしければ丁寧に教えてほしいです。
main関数のところのprintf辺りは課題の要件に沿った記述方法なので気にしないでください。

発生している問題・分からないこと

自分では原因のわからないエラーコードが発生します。
なぜ下記のようなエラーコードがでるのか、またどうしたら直るのか、どのようにしたら上記のプログラムを実現できるのか教えてほしいです。

エラーメッセージ

error

1passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion] 2passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion] 3passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion] 4passing argument 1 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion] 5passing argument 1 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types]

該当のソースコード

#include <stdio.h> #include <string.h> int moji(char p[], char q[]) { if(p[0]>q[0]){ return 1; }else if(p[0]==q[0] && p[1]>q[1]){ return 1; }else{ return -1; } } void swap(char *a) { for(int i=0; i<10; i++){ for(int j=i+1; j<10; j++){ if(moji((char*)(a+i), (char*)(a+j))==1){ char x[10]; strcpy(x, a[i]); strcpy(a[i], a[j]); strcpy(a[j], x); } } } } int main(void) { char *a[10]={"one","two","three","four","five","six","seven","eight","nine","ten"}; swap(&a[0]); for(int k=0; k<3; k++){ for(int l=0; l<3; l++){ printf("%s,", a[3*k+l]); } printf("\n"); } printf("%s\n", a[9]); return 0; }

試したこと・調べたこと

上記の詳細・結果

3日くらいかけて調べて色々試しましたが、全く回復しませんでした。
色々調べすぎて、もはや何が正しいのかもよくわかりません。

補足

特になし

コメントを投稿

0 コメント