>>357
(2) の意味は、例えば読み込んだデータの数が900個だった時
mainで Insertion_sort() を呼ぶ際、data=MAXDATA(999)になってるから
num[900]/str[900]以降のデータもあわせてソートしてるけど
じゃあ、そこに入っている値は何? ということ。

(3), (4) の通りにするとこんな感じになる。
void Insertion_sort(int num[] , char str[][64] , int data){
int i, j;
int numtemp;
char strtemp[64];
for(i = 1; i < data ; i++){
numtemp = num[i];
strcpy(strtemp, str[i]);
for(j = i; j > 0 && num[j-1] > numtemp ; j--){
num[j] = num[j-1];
strcpy(str[j], str[j-1]);
}
num[j] = numtemp;
strcpy(str[j], strtemp);
}
}

文字列のソートをポインタ操作だけで済ませたいときは >>329 のソースに
例えば char str[MAXDATA][64]; の後ろ辺りに文字列へのポインタの配列
char *ptr[MAXDATA]; を追加してデータを読み込む際にptr[]を初期化
(ptr[count] = str[count]とか)し、以降はstr[]の代わりにptr[]を操作すれば良い。