我正在代码学院学习c,并且从不兼容的类型'void *'错误得到了分配给'int *'的信息。我的文件是一个.c文件,其中包括stdlib.h。我不理解该错误,似乎更正使用了相同的代码行。
我正在尝试使用malloc创建一个数组。
我试图找到其他主题的答案。看来malloc并不是实现它的最佳方法,但是我想找到一种使它起作用的方法。
我在Mac上,我使用emacs编写et gcc进行编译。
这是我的代码的一部分:
int main(int argc, char *argv[])
{
char mot_secret[] = "PISCINE";
int nombre_lettres = strlen(mot_secret);
int *pnombre_lettres = &nombre_lettres;
int *decouverte = NULL;
int compteur = 10;
decouverte = malloc(nombre_lettres * sizeof(int));
if (decouverte == NULL)
{
exit(0);
}
这是解决方案: (我尝试翻译一些变量)
int main(int argc, char* argv[])
{
char lettre = 0;
char secretword[100] = {0};
int *lettreTrouvee = NULL;
long coupsRestants = 10; // Compteur de coups restants (0 = mort)
long i = 0;
long wordSize = 0;
wordSize = strlen(secretWord);
lettreTrouvee = malloc(tailleMot * sizeof(int)); // creates a dynamic array of the size of the original)
if (lettreTrouvee == NULL)
exit(0);
错误是:
TP.C:17:16: error: assigning to 'int *' from incompatible type 'void *'
decouverte = malloc(nombre_lettres * sizeof(int));
非常感谢您的帮助,如果我在英语上有任何错误,我们深表歉意。
答案 0 :(得分:12)
看来您文件的名称为TP.C
。
在Unix传统中,C源文件被命名为*.c
(小写c),而C ++源文件被命名为*.C
(大写C)。由于Windows不区分大小写,因此在Windows上使用了替代*.cpp
,但是MacOS上的gcc足够像unix一样,它将*.C
文件视为C ++。
答案 1 :(得分:8)
给出此错误消息:
TP.C:17:16: error: assigning to 'int *' from incompatible type 'void *' decouverte = malloc(nombre_lettres * sizeof(int));
看来您的文件名为TP.C
。 The upper-case .C
file extension causes GCC to compile the file as C++:
必须预处理的file.cc file.cp file.cxx file.cpp file.CPP file.c++ file.C
C ++源代码。请注意,在“ .cxx”中,最后两个>必须都在字面上是“ x”。 同样,“。C”表示字母大写C。
您需要使用小写字母。重命名文件,使其以.c
-小写的c
结尾。
答案 2 :(得分:-9)
从malloc返回的类型始终为void *,可以将其强制转换为所需的数据类型。
您需要执行以下操作: (int *)malloc(nombre_lettres * sizeof(int));
来源:cplusplus