Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Поясните сложение sprintf с int'ом (С, без ++)


Автор: wilson 9.10.2017, 14:38
Что-то не пойму, как можно складывать int с char и получать строку:

Код

void ShowBoard()
{
    char str[1000];
    int i,j,lenstr=0;

    for(i=0; i<ROWS; i++)
    {
        for(j=0; j<COLS; j++)
        {
            lenstr+=sprintf(str+lenstr,"%2c",board[i][j]);//непонятна эта строка и следующая
        }
        lenstr+=sprintf(str+lenstr,"\n");
    }

    MessageBox (0, str, "Крестики-нолики", MB_OK);
}


Остальной код не стал приводить - задаётся двумерный массив board[ROWS][COLS] и выводится в окне с кнопкой ОК. Не могу понять формирование строки str.

Спасибо.

Автор: tzirechnoy 9.10.2017, 18:17
Не с char, а с char[1000]. Оператор + на массивах и указателях практически эквивалентен получению указателя на соответствующий элемент. Порядок операндов в операторе + традицыонно не очень важэн.

Автор: wilson 10.10.2017, 08:36
С указателями немного понятнее. Но как понять lenstr+sprintf ? Функция вывода на экран возвращает какое-то служебное значение в качестве отчёта об отсутствии ошибок, но каким образом происходит накопление элементов массива через это сложение?

Автор: xvr 10.10.2017, 13:39
Во первых - sprintf  это не 'функция вывода на экран'
Во вторых - sprintf возвращает количество символов, которое она записала в выходную строку
Так что lenstr+=sprintf просто смещает индекс в строке (заметьте, что в сам sprintf подается не str а str+lenstr) на количество символов в строке. Таким образом следующий sprintf добавит то, что он выводит, в конец строки

Автор: wilson 10.10.2017, 16:15
Цитата(xvr @ 10.10.2017,  13:39)
Так что lenstr+=sprintf просто смещает индекс в строке ..

Спасибо, теперь проясняется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)