我当时在读What is uintptr_t data type,但在这里我仍然无法理解uintptr_t
unsigned long int
类型,然后再转换回char*
类型。考虑以下代码快照
strncpy(pCfgMgr->mGlobalCfg.grMap[index].userName,
(char *)(uintptr_t) grParams.peerUsrName, 16); /*index is 0 */
userName
中的pCfgMgr->mGlobalCfg.grMap[index].userName
只是声明为的字符数组
char userName[MAX_USERNAME_LENGTH]; /* MAX_USERNAME_LENGTH is 16 */
peerUsrName
中的grParams.peerUsrName
也是一个声明为
char peerUsrName[16];
我没有得到的是 uintptr_t
在复制时有所作为,这不过是unsigned long int
的别名。我很想知道开发人员在这里使用uintptr_t
时在想什么和建议吗?
尽管在uintptr_t
语句上方没有strncpy()
会产生相同的输出。
所有帮助均由衷地感谢。
答案 0 :(得分:2)
演员表是不必要的。
strncpy
的第二个参数的类型为const char *
。类型char *
的表达式在这里也有效。 grParams.peerUsrName
的类型为char [16]
。在大多数情况下,数组会衰减为指向第一个元素的指针。因此,当您将其传递给strncpy
时,它会衰减为类型char *
,这正是期望的。所以不需要演员。