これがやろうとしているのは、配列の先頭に最短文字列のアドレスを配置し、配列の最後に最長文字列のアドレスを配置することですが、何が問題なのかわかりません。Linuxで実行すると、「セグメンテーション違反」が発生します
#include <stdio.h>
#include <string.h>
void fx(char* t[], int n);
int main(void) {
char*t[]= {"horse", "elephant", "cat", "rabbit"};
int n, i;
n = sizeof(t)/sizeof(t[0]);
fx(t, n);
printf("shortest is %s, longest is %s\n", t[0], t[n-1]);
}
void fx(char* t[], int n) {
int i;
char* temp, len0, len1, len;
len0 = strlen(t[0]); /* lenght of first string*/
len1 = strlen(t[n+1]); /*lenght of last string*/
for(i=0; i<n; i++) {
len = strlen(t[i]); /*temporary lenght if ith string*/
if( len < len0 ) {
temp = t[0]; /* if shorter, swap places with first*/
t[0] = t[i];
t[i] = temp;
}
else if(len > len1) { /* if larger, swap places with last*/
temp = t[n-1];
t[n-1] = t[i];
t[i] = temp;
}
}
}