- ベストアンサー
ポインタ配列を関数で渡す方法について
- ポインタを使用して配列を関数に渡す方法について教えてください。
- 配列の並び替え処理を関数に渡す際に発生するエラーについて解決方法を教えてください。
- 適切な方法でポインタ配列を関数に渡す方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 どのようなエラーが出たのかがわからないので、思ったことを書かせていただきます。 まず、一番下の閉じ中かっこ"}"が1つ足りないです。 それから、 "char *temp;"は"char temp;" "temp = pstr+cnt1;"は"temp = pstr[ct1];" です。 以下に、少し長くなりますが、修正したコードとその使い方、また、BLUEPIXYさんのご回答のコードの使い方を示しておきます。 ご自分の環境で動かしてみてください。 (Windows2000Pro + VC++.NETで確認しました) void sort(char *pstr,int cnt) { int ct1; int ct2; char temp; for(ct1 = 0 ; ct1 < cnt-1 ;ct1++) { for(ct2=ct1 + 1 ; ct2 < cnt ; ct2++) { int ret=strcmp(pstr+ct1,pstr+ct2); if(ret>0) { temp = pstr[ct1]; pstr[ct1] = pstr[ct2]; pstr[ct2] = temp; } } } } void sort2(char **pstr,int cnt){ /*BLUEPIXYさんのご回答のコード(省略します)*/ } int main() { char str[] = "ACBFEDIGH"; printf("ソート1処理前\n"); printf("%s\n", str); sort(str, (int)strlen(str)); printf("ソート1処理後\n"); printf("%s\n", str); printf("\n\n"); int i; char *str2[] = {"XYZ", "RST", "OPQ" }; printf("ソート2処理前\n"); for(i = 0; i < 3; i++) printf("%s\n", str2[i]); sort2(str2, 3); printf("ソート2処理後\n"); for(i = 0; i < 3; i++) printf("%s\n", str2[i]); return 0; }
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ポインタの配列だから**pstrとして… void sort(char **pstr,int cnt){ int ct1, ct2; int ret; char *temp; for(ct1 = 0 ; ct1 < cnt-1 ;ct1++){ for(ct2=ct1 + 1 ; ct2 < cnt ; ct2++){ ret=strcmp(pstr[ct1],pstr[ct2]); if(ret>0){ temp = pstr[ct1]; pstr[ct1] = pstr[ct2]; pstr[ct2] = temp; } } } }