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