我正在阅读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 数组
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()
语句产生相同的输出。
全心全意地感谢所有帮助。
最佳答案
Actor 阵容是不必要的。
strncpy
的第二个参数的类型为 const char *
。 char *
类型的表达式在这里也是有效的。 grParams.peerUsrName
的类型为 char [16]
。在大多数情况下,数组都会衰减为指向第一个元素的指针。因此,当您将其传递给 strncpy
时,它会衰减为类型 char *
,这正是它所期望的。所以不需要 Actor 阵容。
关于c++ - Char 数组和 uintptr_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55305593/