【问题标题】:C: Adding integer to char pointer(address)C:将整数添加到 char 指针(地址)
【发布时间】:2017-11-18 11:29:02
【问题描述】:

我从一个函数中得到一个指向块(开始时为空)数据的指针。

这个指针是:

char* data;

我的工作是在这个块中插入不同类型的数据。我只知道数据类型(string/int/float)和它们的字节长度。

例如,对于一个插入整数,我想给每个块一个如下形式:

|block_num|age|weight|favorite_number|

所以我的主要问题是,如何将数字插入块并让它们喜欢?我希望数据[3] 每次都能获得体重。

我尝试过使用memset和memcpy,但没有成功。

感谢您的宝贵时间!

【问题讨论】:

  • 您想将int 存储在char* 指向的地址中?
  • 如果我理解正确,您希望您的函数返回可能是不同类型的东西(字符串/int/float/etc..)。使用基本指针 'char*' 然后进行强制转换被认为不是类型安全的。我建议您定义将保存“数据”的抽象基类,并为该类定义几个纯虚拟方法。您的函数应返回将以多态方式使用的基类指针。
  • @PazO.: 你说的是C
  • @coderredoc:我说的是C++实现
  • @PazO.:OP 在C 标签下提出了问题。

标签: c char-pointer


【解决方案1】:

如果您想写入char* 指向的地址,您需要将其转换为正确的类型(您想要的)并取消引用它。

例如:(这里的returnedFromFunc 与您的data 相似)。

char *returnedFromFunc = func();

您可以通过将int 正确转换为int* 来编写int*

*((int*)(returnedFromFunc))=intValue;

要转到下一个位置,您只需执行以下操作:-

char *originalPtrValue = returnedfromFunc; // store it for future referece
returnedfromFunc += sizeof intVar;

同样,如果您知道要存储的数据类型,您也可以访问它。

例如如果是int

你可以这样做

printf("%d ", *((int*)(returnedFromFunc)));

使用sizeof 运算符,您可以访问不同的位置。(从初始char* 值偏移)。

您需要知道有多少内存可以写入。否则,您可能会尝试写入您无权访问的内存。(超出范围)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多