Объяснение следующего вызова strncpy - PullRequest
0 голосов
/ 04 декабря 2018

Я сейчас читаю книгу (Программирование под Socket в Linux - ПО ПРИМЕРУ) и на стр. 45 Автор использует странное использование (вызов) strncpy, и я не могу понять, почему оно также работает:

strncpy(  adr_unix.sun_path,
          pth_unix,
          sizeof( adr_unix.sun_path ) - 1 ) [sizeof adr_unix.sun_path - 1] = 0;

Я ожидал, что это должно быть так:

strncpy(    adr_unix.sun_path,
            pth_unix,
            sizeof( adr_unix.sun_path ) - 1 );

adr_unix.sun_path[sizeof adr_unix.sun_path - 1] = 0;

Какой код используется здесь в третьем аргументе strncpy?:

sizeof( adr_unix.sun_path - 1 ) ) [sizeof adr_unix.sun_path - 1] = 0;

1 Ответ

0 голосов
/ 04 декабря 2018

Обратите внимание, что strncpy вызов заканчивается здесь

strncpy(adr_unix.sun_path,
        pth_unix,
        sizeof( adr_unix.sun_path ) - 1 )

Так как strncpy возвращает адресата (adr_unix.sun_path), который вызывает его эквивалент вашего

strncpy(    adr_unix.sun_path,
        pth_unix,
        sizeof( adr_unix.sun_path ) - 1 );

adr_unix.sun_path[sizeof adr_unix.sun_path - 1] = 0;

и третийаргумент strncpy вызов только sizeof( adr_unix.sun_path) - 1

...