我目前正在读一本书(Linux套接字编程-BY EXAMPLE(,在第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
返回调用它的目的地(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;
CCD_ 6调用的第三个自变量仅为CCD_ 7