これまでのところ、このプログラムは2つの整数(ユーザ定義配列のサイズ)を取り込み、一度に1つの要素または文字を取り込み、アレイ。両方の配列がいっぱいになると、配列の1つをアルファベット順に並べる必要があります(これは組み込みの 'qsort'で行います)。qsortを使用してmalloced文字配列をcでソートする
しかし、このコードはqsortが呼び出されるとランタイムエラーに遭遇し、私の問題はそれをどうやって修正するのかわかりません。
マイコード:
const char * a1 = (const char *) a;
const char * b1 = (const char *) b;
それとも単に:
return strcmp((const char *) a, (const char *) b);
あなただけまっすぐにキャストを必要とするので、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int toExit(int exit){
while(exit != 1 || exit !=2){
printf("\n\nPlease Choose:\n1) Exit\n2) Run program again\nYour choice: ");
scanf("%d", &exit);
printf("\n");
switch(exit){
case 1:
return exit;
case 2:
return exit;
default:
printf("That is not one of the given options.\n\n");
}
}
}
int compare(const void *a, const void *b){
const char* a1 = *(const char**)a;
const char* b1 = *(const char**)b;
return strcmp(a1,b1);
}
int main(void) {
int exit=0, i, j;
int lengthX, lengthA;
char *Xsequence, *Asequence, *_$;
while(exit != 1){
printf("please enter the length of sequence A: ");
scanf("%d", &lengthA);
printf("please enter the length of sequence X: ");
scanf("%d", &lengthX);
printf("\n"); //spacing, visual look of the program
Asequence =(char*) malloc(lengthA*sizeof(char));
Xsequence =(char*) malloc(lengthX*sizeof(char));
for(j=0;j<=lengthA-1;j++)
{
printf("Element %d of A: ",j+1);
scanf("%s", &Asequence[j]);
}
printf("Last Element of A (looking for \"$\"): ");
scanf("%s", &_$);
printf("\n"); //spacing, visual look of the program
for(j=0;j<=lengthX-1;j++)
{
printf("Element %d of X: ",j+1);
scanf("%s", &Xsequence[j]);
}
printf("Last Element of X (looking for \"$\"): ");
scanf("%s", &_$);
printf("\n"); //spacing, visual look of the program
qsort (Xsequence, lengthX, sizeof(char*), compare);
printf("The \"A\" sequence is: %s\n",Asequence);
printf("The \"X\" sequence is: %s\n",Xsequence);
exit = toExit(exit);
}
// return 0;
}
まず、Cでは 'malloc'(または他の暗黙の' void * 'ポインタのキャスト)の戻り値をキャストすることを強くお勧めします。 –
なぜ、 'free()'を呼び出して割り当てられたメモリを解放しないのですか?プログラムが終了するので、 –
php-coder? – Joey