问题标签 [void-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 在没有 stringWithCString 的情况下将 void* 转换为 NSString*
我有一个与钥匙串交互的程序。你传入一个指向 void 指针的指针,我猜钥匙串将它指向密码,你还传入一个 UInt32 指针,它将指向密码的长度。
然后我需要将其用作 NSString,我尝试直接将其转换为这样,但它聚合了所需的更多位,并且不适用于密码。我尝试使用:
这将密码更改为类似中文的字符。不知道为什么。当我在调试模式下打印描述时,它给了我:
我能够让它完美地工作:
但这是折旧的,我想避免使用它。我对 C 和 Objective-C 都很陌生,void 指针让我陷入循环。在调试模式下,我查看了指针指向的内存,它肯定在那个内存位置。我尝试使用 const char* 但它不喜欢这样说变量可能尚未初始化。
这是我用来获取钥匙串的方法
有没有办法让 NSString 以正确的长度指向那里并让它成为正确的东西。谢谢您的帮助。这个地方很棒!
c - C 问题:对 void** 双间接指针的单次取消引用
我收到了这条消息:
当我试图编译类似这样的东西时:
在阅读有关堆栈溢出的这个问题后,我发现了我认为的解决方案:
避免不兼容的指针警告在处理双重间接时 - 堆栈溢出
所以我调整为这样的内容:
这是合法的C吗?我正在取消引用一个 void 指针,不是吗?
谢谢大家
编辑 2010 年 12 月 10 日下午 4:45 EST:
正如已经指出的那样,它free(NULL)
是安全的并且被 C 标准覆盖。此外,如下所述,我上面的示例是不合法的 C。请参阅 caf 的答案、Zack 的答案和我自己的答案。
因此,我将更容易将任何要被 malloc 的指针初始化为 NULL,然后在代码中直接将 free() 和 NULL 初始化为:
我像以前一样在 myfree() 中检查 NULL 的原因是因为我使用 fclose() 的经验。fclose(NULL)
可以根据平台(例如 xpsp3 msvcrt.dll 7.0.2600.5512)发生段错误,所以我假设(错误地)同样的事情可能发生在 free() 上。我想,与其用 if 语句弄乱我的代码,我可以更好地在函数中实现。
谢谢大家的好讨论
c - 在 C 中使用 void * 代替重载?
我的问题是我在多线程应用程序中看到过这样的代码:
这极大地引起了我的兴趣,我知道malloc
发回一个 void 指针,你可以将它转换为你想要的,这是否意味着我可以创建一个可以接受任何数据类型的函数?
例如我写的一个没有测试的函数:
我可能完全错了,即使这确实有效,这是可怕的做法吗?谢谢。
c++ - 将 Int 作为 void* 传递,然后获取值
我正在使用一个 Timer 类,该类将 void* 作为可选参数传递给回调。我需要传递一个整数,但我的逻辑似乎并不顺利。
在 Event_PlayerSpawn() 我有一个 int* clientIndex 指向 int“客户端”的内存位置。我将它传递给 void* 参数,然后在回调中将其再次转换为 int*,然后取消引用它以获取值。我到底哪里错了?
c - 你如何从位域转换为指针?
我编写了以下代码,它产生了
警告:初始化使指针从整数而不进行强制转换
或
警告:从不同大小的整数转换为指针
来自 gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-52)
如何让警告消失?无论我尝试过什么投射,似乎总是会出现警告。
谢谢,陈兹
c - C 取消引用 void* 指针
我是 C 新手,对于我的第一个项目,我需要实现一个基于数组的队列。
我希望我的队列能够保存任何类型的对象,因此我创建了一个 QueueElement 结构来保存指向任何类型对象的 void 指针。我认为一切正常,除了我无法从我的 QueueElement 结构中读取“位置”和“值”字段。尝试编译时出现以下错误。
错误:
我很确定我只是没有正确投射。任何帮助表示赞赏。
再次感谢,狗
可运行的.c
队列.h
队列.c
队列元素.h
队列元素.c
c++ - boost::variant 和 void* 指针
我需要一个包含任何用户定义类的实例的变体类型。所以我使用 void*:
我用地图创建了一个包装类:
使用示例:
这个 void* 在变体类中有两个问题:
- 使用指向动态分配内存的指针复制属性是危险的并且容易出错。
- 用户可以将 void* 静态转换为 WrongClass*,而不是 MyClass*。它编译,但结果是不可预测的。
可能的解决方案:
- 使用 boost::shared_ptr< void* >。
- 记住所有 void* 值(添加时)的 typeid
std::map<void*, typeid> typeid_map
。当用户请求 void* 值,将其转换为任何 TClass* 时,让我们评估一个断言:assert(typeid_from_typeid_map == typeid(TClass*))
。
问题:
1. 是否有其他解决方案来保存任何用户定义类的值?
2. 可能你会为提到的问题推荐更好的解决方案并指出其他一些问题?
c - C:为什么从 void 指针转换为未定义的函数指针?
在 dlsym 的手册页中,提供了以下代码段。
我查看了相关的规范页面,但仍然无法理解不允许从 void 指针转换为函数指针的原因。void 指针是否应该足够大以容纳所有类型的指针。如果是这样,为什么不定义这个铸造?
c - 如何将结构中的多个 void 指针取消引用到 1 块内存中?
我正在做一个项目,我需要通过某个 IPC 堆栈(在我的情况下为 LCM)发送,问题是我需要为 IPC 提供一个可变长度的结构。我有
我有一个指向 pack2 的指针,我需要像序列化这样的东西,所以我可以pack2
通过网络将它发送到另一个进程。
有谁知道怎么做?
c - 如何通过函数修改指向 void 的指针?
我正在尝试创建一个链接列表,您可以在其中更新节点中的数据,但无论我尝试什么,C 似乎都不允许我更新 void 指针的值(或者更确切地说它指向的位置) . 这是我的测试代码:
仅输出::
我在这里遗漏了一些明显的东西吗?我也尝试过使用指向指针的指针,但无济于事。