gpt4 book ai didi

将 char* 内存地址转换为 void* 并返回 C

转载 作者:行者123 更新时间:2023-12-01 14:36:15 35 4
gpt4 key购买 nike

我正在尝试将 char* 的内存地址作为 void* 传递,然后将 void * 内存地址转换回其他地方的字符串。所以我有,

char *text               // text="somestring";
void *memadrs=&text;

现在我正在尝试将 void *memadrs 转换为新的 char *。

如果已经有其他主题与此相关,我深表歉意,但根据我对指针/引用它们的搜索和困惑,我找不到任何足够相关的内容来满足这个要求。

为帮助干杯!

编辑:很抱歉让大家感到困惑,char* 不是常量。

最佳答案

给定 const char* text = "somestring",您确实应该使用 const void* memadrs = text 转换为 const void*。这是因为 "somestring" 是一个只读 以 null 结尾的字符串文字。请注意,您不需要使用寻址运算符 &,因为 text 已经是指针类型。

使用 const void* 转换有助于在随后尝试转换为 char* 时发出编译时错误。这很有用,因为将 memadrs 转换为 char* 然后修改内存的行为将未定义因为原始内存是只读的。

支持这一点的 C 标准引用:

[C99: 6.7.3/5]: If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non-const-qualified type, the behavior is undefined.

要转换回 const char*,请使用 (const char*)memadrs

我将 char const* 切换为 const char* 只是个人喜好。

关于将 char* 内存地址转换为 void* 并返回 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34157055/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com