字符数组和uintptr_t

时间:2019-03-22 18:13:49

标签: c++ c pointers

我当时在读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 */

userName中的pCfgMgr->mGlobalCfg.grMap[index].userName只是声明为的字符数组

char userName[MAX_USERNAME_LENGTH]; /* MAX_USERNAME_LENGTH is 16 */

peerUsrName中的grParams.peerUsrName也是一个声明为

的char数组。
char peerUsrName[16];

我没有得到的是 uintptr_t在复制时有所作为,这不过是unsigned long int 的别名。我很想知道开发人员在这里使用uintptr_t时在想什么建议吗?

尽管在uintptr_t语句上方没有strncpy()会产生相同的输出。

所有帮助均由衷地感谢。

1 个答案:

答案 0 :(得分:2)

演员表是不必要的。

strncpy的第二个参数的类型为const char *。类型char *的表达式在这里也有效。 grParams.peerUsrName的类型为char [16]。在大多数情况下,数组会衰减为指向第一个元素的指针。因此,当您将其传递给strncpy时,它会衰减为类型char *,这正是期望的。所以不需要演员。

相关问题