如何在 C 中将 void 指针转换为 char 指针
Posted
技术标签:
【中文标题】如何在 C 中将 void 指针转换为 char 指针【英文标题】:How do you convert void pointer to char pointer in C 【发布时间】:2011-10-27 10:20:36 【问题描述】:好的,这对我来说太令人困惑了。我只是不知道这个作业有什么问题:
void *pa; void *pb;
char *ptemp; char *ptemp2;
ptemp = (char *)pa;
ptemp2 = (char *)pb;
谁能告诉我为什么会出现这个错误:
错误:从‘void*’到‘char*’的无效转换
【问题讨论】:
此代码不会产生任何错误(假设上下文正确)。这些转换没有任何无效。像这样的错误通常是为 C++ 中的ptemp = pa
赋值生成的(即没有强制转换,C++ 编译器)。您声称正在使用 C 编译器,并且在那里进行了显式转换。你的情况不会有这样的错误。请发布真实代码。
什么编译器?它是 C 编译器,而不是 C++ 编译器吗?照原样,您所拥有的是合法的 C 并且将通过 gcc
在 C99 标准模式下没有任何问题。
现在这是一个奇怪的错误信息...
这个错误可能是因为这个赋值语句出现在全局作用域而不是函数中。
@Vlad Lazarenko:这可能会触发一个非常不同的错误消息。
【参考方案1】:
实际上,您的编译器一定有问题(或者您没有说出完整的故事)。将void*
转换为char*
是完全合法的。此外,转换在 C 中是隐式(与 C++ 不同),即以下内容也应该编译
char* pChar;
void* pVoid;
pChar = (char*)pVoid; //OK in both C and C++
pChar = pVoid; //OK in C, convertion is implicit
【讨论】:
我正在使用 g++ 编译器,我已经在 windows visuall c++ 上编译了代码,没有问题,但是使用 g++ 我得到了这个错误 Armen,我只关心 C,但是当将char **
传递给以 void **
作为参数的函数时,GCC 给了我一个 -Wincompatible-pointer-types
,所以它是隐式的仅适用于单个指针?
@APJo:当然,看T*
可以转换成void*
。如果将T
设置为char*
,您将看到char**
可以隐式转换为void*,但不能转换为void**
@ArmenTsirunyan 我不清楚。我需要这是void **
...
@APJo:为什么你需要它成为void**
,你打算用它做什么?【参考方案2】:
我刚刚在一个名为 temp.c 的模块中尝试了您的代码。我添加了一个名为 f1 的函数。
void *pa; void *pb;
char *ptemp; char *ptemp2;
f1()
ptemp = (char *)pa;
ptemp2 = (char *)pb;
在 Linux 上,我输入了 gcc -c temp.c,编译后没有错误或警告。
您在哪个操作系统上尝试此操作?
【讨论】:
我使用 g++ 作为编译器,而不是 gcc。也许 gcc 对此有问题?以上是关于如何在 C 中将 void 指针转换为 char 指针的主要内容,如果未能解决你的问题,请参考以下文章
关于在 C 中将 `void *` 转换为 `int` 的问题
void Test::printxy(void)' : 不能在 const 类中将 'this' 指针从 'const Test' 转换为 'Test &'