Ответы пользователя по тегу C
  • Зачем нужно выравнивание памяти по слову?

    WNeZRoS
    @WNeZRoS
    В подтверждение слов Rsa97 и zedxxx могу привести код на godbolt.
    Там выбрана архитектура ARM, так как там хорошо видно разницу из-за его простоты.

    В жёлтом блоке ассемблерного кода происходит побайтовое чтение поинтера из байт 3, 4, 5, 6 и его склеивание, т.к. отключено выравнивание.
    В голубом блоке происходит чтение сразу всего поинтера потому что он выровнен.
    Ответ написан
    Комментировать
  • Почему в VS программа на СИ работает неправильно, хотя в онлайн компиляторе все в порядке?

    WNeZRoS
    @WNeZRoS
    Онлайн компилятор компилирует при помощи GCC, и скорее всего на Linux системе.
    В Visual Studio компилятор Visual C и система Windows.
    В Windows строка в текстовых файлых файлах заканчивается двумя символами - \r\n.
    В Linux строка заканчивается одним символом - \n.
    При записи в текстовый файл символа \n в Windows автоматически добавляется символ \r.
    При чтении текстового файла он пропускается.

    Соответственно, у вас в reverseOrder получается неправильный pos на который делается fseek т.к. считается в ручную.
    Починить это можно двумя способами: или сказать системе что файл бинарный, или вместо ручного подсчёт npos использовать ftell.
    Ответ написан
    1 комментарий