【问题标题】:Assign a byte pointer to a struct in C将字节指针分配给 C 中的结构
【发布时间】:2023-04-06 10:57:01
【问题描述】:

这个让我很烦,但我想避免只使用 memcpy 的明显解决方案。

struct Person
{
    //Some variables
};

void doSomething(char* pointerToSomeone)
{
    struct Person bob;

    //Assign pointerToSomeone to bob, somehow...
}

在上面,pointerToSomeone 是一个指向 Person 结构的指针。 我如何将它分配给鲍勃?确定有可能吗?

我尝试了许多我认为合理的强制转换、尊重等但没有成功(编译器错误)。

【问题讨论】:

  • 如果这应该改变pointerToSomeone outsied doSth,你应该使用**而不是*。
  • 首先,如果pointerToSomeone真的指向一个Person,为什么它被声明为“char *”?它应该是指向结构的指针,否则为 void *.其次,“将其分配给鲍勃”实际上是什么意思?你的意思是让它指向鲍勃结构吗?那只是“pointerToSomeone = &bob”,它将在函数的范围内有效(但不在它之外)。你真的是说你想将数据从一个结构复制到另一个结构吗?这需要 memmove()。那么你真正想要做什么呢?

标签: c pointers reference variable-assignment dereference


【解决方案1】:

您不能将指向char 的指针分配给struct,但可以将char* 指向的内容复制到struct 中,如下所示:

memcpy(&bob, pointerToSomeone, sizeof(struct Person));

如果pointerToSomeone 没有类型,则更常见的是使用void* 而不是char*

【讨论】:

    【解决方案2】:

    你不能。但是,如果您确定pointerToSomeone 确实是指向Person 的指针,那么您可以将bob 设为指针并使用类型转换:

    struct Person *bob = (struct Person *) pointerToSomeone;
    

    【讨论】:

    • 宾果游戏。我知道以我正在做的方式使用局部变量是荒谬的!
    【解决方案3】:

    您可以简单地这样做(假设这是一个有效的演员表):

    struct Person bob = *((struct Person*) pointerToSomeone);
    

    请注意,您正在复制指针的堆栈,而不是像这样引用它:

    struct Person* bob = (struct Person*) pointerToSomeone;
    

    【讨论】:

      【解决方案4】:

      您只需将pointerToSomeone 指向的结构复制到bobmemcpy,只需确保pointerToSomeone 确实是指向结构Person 的指针

      void doSomething(char* pointerToSomeone)
      {
          struct Person bob;
      
          memcpy( &bob , pointerToSomeone , sizeof( struct Person ) ) ;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        相关资源
        最近更新 更多