Ошибка l-value - C (СИ)

Формулировка задачи:

Хочу сделать функцию, которая будет сортировать вывод строк, вот такую вот соченил:
void choose_2(unsigned char ar[][COLS], int rows)
{
    int i, j;
    char *buf;
    for(i = 0; i < rows ; ++i)
        for(j = i; j < rows; ++j)
            if(strcmp(*(ar + i),*(ar + j)) > 0 )
            {
                buf = ar[i];
                ar[i] = ar[j];
                ar[j] = buf; 
            }
}
Выдает ar[i] = ar[j]; ar[j] = buf; в этих вот местах, что перед = должно быть значение "l-value". Суть ошибки я понимаю, проблема в том, что начал просматривать, как сортировка сделана в книге Cтивена Прата, и обнаружил, что очень похоже, в частности такие выражения, в которых у меня ошибки там присутствуют. Добавлено через 16 минут в первом цикле нужно добавить "i < rows - 1", во втором цикле for нужно добавить "j = i + 1", но суть от этого не изменяется

Код к задаче: «Ошибка l-value - C (СИ)»

textual
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define ROWS 10
#define COLS 40
void get_ap_to_ten(unsigned char ar[][COLS]);
void choose_2(unsigned char ar[][COLS], int rows);
int main()
{
    int i;
    unsigned char string[ROWS][COLS] = {0};
 
    get_ap_to_ten(string);
    choose_2(string, ROWS);
    for(i = 0; i < ROWS ;i++)
        fputs(string[i], stdout);
    
}
void get_ap_to_ten(unsigned char ar[][COLS]) 
{
    int i;
    puts("Enter up to 10 strings:");
 
    for(i = 0; i < ROWS && fgets(ar[i],COLS,stdin) != NULL ; ++i)
        ;
}
void choose_2(unsigned char ar[][COLS], int rows)
{
    int i, j;
    unsigned char *buf;
    for(i = 0; i < rows ; ++i)
        for(j = i; j < rows; ++j)
            if(strcmp(*(ar + i),*(ar + j)) > 0 )
            {
                buf = ar[i];
                ar[i] = ar[j];
                ar[j] = buf; 
            }
}

8   голосов, оценка 3.500 из 5


СОХРАНИТЬ ССЫЛКУ