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