【发布时间】:2019-03-22 18:13:49
【问题描述】:
我正在阅读What is uintptr_t data type,但我仍然无法理解这里的uintptr_t
- 首先将 char 数组 类型临时转换为
unsigned long int类型,然后再转换回char*类型来达到什么目的。
考虑下面的代码快照
strncpy(pCfgMgr->mGlobalCfg.grMap[index].userName,
(char *)(uintptr_t) grParams.peerUsrName, 16); /*index is 0 */
pCfgMgr->mGlobalCfg.grMap[index].userName 中的 userName 只不过是一个声明为的 char 数组
char userName[MAX_USERNAME_LENGTH]; /* MAX_USERNAME_LENGTH is 16 */
而grParams.peerUsrName中的peerUsrName也是一个char数组,声明为
char peerUsrName[16];
我没有得到的是 uintptr_t 在复制时会有所作为,它只不过是 unsigned long int 的别名。我很想知道开发人员在此处使用uintptr_t 时的想法 & 是否推荐?
虽然没有uintptr_t 以上strncpy() 语句产生相同的输出。
衷心感谢所有帮助。
【问题讨论】:
-
使用
(uintptr_t)会创建对uintptr_t存在的依赖,这是一种可选类型。除非存在公共类型uintptr_t,否则代码不会编译。这样做更有可能是不必要的而不是有用的。