以下 strncpy 调用的解释

Explanation of the following strncpy call

我目前正在阅读一本书(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;

注意strncpy调用在这里终止

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

所以因为 strncpy returns 调用它的目的地 (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