为什么我运行会这么显示,需要怎么改

img


#include <stdio.h>
void rank_r_salary(char uid[10][5], int r_salary[10]) {
/********** Begin ********/
int i = 0;
int j;
int max=0;
int temp;
for (i = 0; i < 9; i++)
{
max = i;
for (j = i + 1; j < 10; j++)
{
if (r_salary[j] < r_salary[max])
max = j;
}
temp = r_salary[i];
r_salary[i] = r_salary[j];
r_salary[j] = temp;
}

    for (i = 0; i < 9; i++) {
        printf("        %d\n", r_salary[i]);
    }

}
/********** End /
void rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10]) {
/
Begin **********/

/********** End **********/

}
int main()
{
char a[10][5] = { "U01","U02","U03","U04","U05","U06","U07","U08","U09","U10" };
int b[10] = { 2200,2400,2700,2200,3000,3700,3400,4200,2800,5600 };
int c[10] = { 2003,2218,2449,2030,2760,3418,3133,3964,2589,5284 };
int d[10] = { 0 };

rank_r_salary(a, c);
rank_t_salary_id(a, b, d);


return 0;

}

能说的清楚点么?怎么显示了?


void rank_r_salary(char uid[10][5], int r_salary[10]) {
/********** Begin ********/
int i = 0;
int j;
int max=0;
int temp;
for (i = 0; i < 9; i++)
{
max = i;
for (j = i + 1; j < 10; j++)
{
if (r_salary[j] < r_salary[max])
max = j;
}
temp = r_salary[i];
r_salary[i] = r_salary[max];
r_salary[max] = temp;
}
    for (i = 0; i < 9; i++) {
        printf("        %d\n", r_salary[i]);
    }
}

数组越界了,j循环最后执行了j++,所以此时j= 10

r_salary[i] = r_salary[j];改成r_salary[i] = r_salary[j-1];