以下strncpy调用的说明

时间:2018-12-04 17:32:55

标签: c sockets strncpy

我目前正在阅读一本书(Linux套接字编程-示例),并且在第45页上,作者使用了strncpy的一个奇怪的use(call),但我不明白为什么它也可以工作:

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 :(得分:3)

请注意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