c - 以下 strncpy 调用的解释
问题描述
我目前正在阅读一本书(Linux Socket Programming - BY Examples),在第 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;
和第三个参数strncpy
调用只是sizeof( adr_unix.sun_path) - 1
推荐阅读
- visual-studio - 我应该将 Visual Studio 调试器附加到哪个进程来调试 Kestrel 应用程序?
- javascript - 显示 API 结果
- flutter - 应用启动,只有白屏,奇怪的流错误信息
- jquery - “System.Web.HttpServerUtility”不包含“JavaScriptStringEncode”的定义
- javascript - 您可以使用 jQuery 处理程序作为 .on() 的选择器吗?
- c# - WPF标签背景png图片透明
- php - 如何在sql数据库中存储包含用户国家的html表单
- c# - 无法从脚手架创建新帐户
- ruby-on-rails - 未选择的值的排列
- android - InfoWindows 不采用每个信息窗口标记