你声明了 char temp[5][20]; 可以存放 5 个字符串,每个长度小于20。
语句中 第一个下标 只能用 0到4,共 5 个:
temp[0],temp[1],temp[2],temp[3],temp[4].
所以你写 temp[5] 则下标超界出错
作为临时变量,其实声明 char temp[20]; 也就够了, 语句中用:
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
做交换 便可。