c++ - Char 数组和 uintptr_t

标签 c++ c pointers

我正在阅读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 */

哪里userNamepCfgMgr->mGlobalCfg.grMap[index].userName只是一个声明为 的 char 数组

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

peerUsrNamegrParams.peerUsrName也是一个声明为

的 char 数组
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/

相关文章:

c - FORTRAN 比 C 快 - 对于在同一处理器上运行的矩阵乘法程序,为什么?

c++ - 我是否错误地传递了这个二维数组?

c - while(fgets) 之后的 memset()

c++ - 将一个对象与左侧的常数相乘

C++搜索目录和文件

C++。 SevenZip 压缩为 zip 格式。 ClassFactory 无法提供请求的类

c - C 中的 strtok 错误

c++ - 如何使用 MPI_Send 在 MPI 中发送嵌套结构

c - 使用指针将一个字符串复制到另一个字符串的程序不产生任何输出

c - 尝试将结构体中的指针分配给二维数组