#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXDATA 3
#define MAXSTR 256
int cmp(const void * , const void *);

int main(void){
char data[MAXDATA][MAXSTR];
int i;

for(i = 0 ; i < MAXDATA ; i++)
printf("%d人目の名前 -> " , i + 1);  scanf("%s" , data[i]);

qsort(data , MAXDATA , sizeof(char *) , (int(*)(const void * , const void *))cmp);

for(i = 0 ; i < MAXDATA ; i++)printf("%s\n" , data[i]);

return 0;
}
int cmp(const void *s1 , const void *s2){
return strcmp(*(char **)s2 , *(char **)s1);
}

このように変更してみましたが、やっぱりうまく動きません・・・。
qsortの比較関数を最初のままにし、二次元配列の宣言をこの状態にしたときには、
なぜかdata[0]の中身が変化してしまいました・・・。