私は2-Dの文字配列文字列の並べ替え
#include <stdio.h>
#include <string.h>
void swap(char *,char *);
void main() {
char a[20][20];
int Pass = 0, i = 0, j = 0, n;
printf("\nHow many elements you want to sort ? >> ");
scanf("%d", &n);
printf("\n\nEnter the elements to be sorted :\n");
for (i = 0; i < n; i++)
scanf("%s", a[i]);
for (Pass = 1; Pass < n; Pass++) {
for (j = 0; j < n - Pass; j++)
if (strcmp(a[j], a[j + 1]) < 0)
swap(a[j], a[j + 1]);
printf("\n\nPass = %d\n", Pass);
for (i = 0; i < n; i++)
printf(" %s ", a[i]);
}
}
void swap(char *a, char *b) {
char *t;
*t = *a;
*a = *b;
*b = *t;
}
でソートされた文字列を取得するには、次のコードを書かれている。しかし、私はセグメンテーションが発生しないのはなぜ
How many elements you want to sort ? >> 5
Enter the elements to be sorted :
1 2 3 4 5
Pass = 1
2 3 4 5 1
Pass = 2
3 4 5 2 1
Pass = 3
4 5 3 2 1
Pass = 4
Segmentation fault (core dumped)
として出力を得ます不具合?
メインは 'int型を返す必要があります' –
あなたの' swap'機能が間違っています。 1) 'char * t; * t = * a; ':初期化されていない変数を使用しています。 2)交換する必要があるのは、ポインタ(または1つの 'char')ではなく配列です。 – BLUEPIXY
時間を節約し、すべてのコンパイラの警告を有効にします。 'char * t; * t = * a; '初期化の前に' t 'が使用されていることを警告する必要があります。 – chux