несовместимое объявление во встроенной функции malloc и несовместимые типы в ошибке присваивания в c - PullRequest
1 голос
/ 18 апреля 2010
 char 
 char* c[30];
    c = (char*) malloc(30*sizeof(char) );

Как это дает несовместимое объявление во встроенной функции предупреждения и несовместимые типы в ошибке присваивания в строке, где я объявил malloc. В соответствии с синтаксисом malloc, у меня не должно быть ошибок

Ответы [ 5 ]

1 голос
/ 12 сентября 2011

вам нужно #include <stdlib.h>

1 голос
/ 18 апреля 2010

Вы объявили c как массив. Вы не можете изменить значение массива, и массив не является указателем.

c имеет тип (char*)[30] (т.е. массив из 30 указателей на символы), а не char*, как предполагает ваш актерский состав.

Если вы пытаетесь создать динамически распределяемый массив символов для 30 символов, используйте

char *c = malloc(30);

Если вам действительно нужен массив из 30 указателей на символы, например, выделите место для 30 символов в каждом из его элементов, используйте

int i;
for(i = 0; i < sizeof c/sizeof c[0]; i++) {
  c[i] = malloc(30);
  if(c[i] == NULL) {
    //handle error
   }
}
0 голосов
/ 19 апреля 2010

sizeof (char) для определения всегда 1, поэтому вам не нужно его писать.

В C malloc возвращает void *, так что набор типов не нужен (даже вреден, поскольку он подавляет полезные предупреждения, не забудьте #include <stdlib.h> или #include <memory.h>).

char* c[30]; 

объявляет массив из 30 char *, вероятно, не то, что вы имели в виду.

Если вы хотели получить массив из 30 char, вы должны были объявить

char c[30]; 

и забудьте о malloc.

Если вам нужен указатель на массив char, длина которого равна 30, то вы должны написать:

char *c;
c = malloc(30);
0 голосов
/ 18 апреля 2010

Используйте это:

char* c;
c = (char*)malloc(30*sizeof(char));

То, что вы объявляли, это массив из 30 указателей на символы. Вот почему вы получили несовместимое объявление в предложении malloc.

Вы могли бы сделать это, хотя:

c[0] = (char*)malloc(30*sizeof(char) );
c[1] = (char*)malloc(30*sizeof(char) );
...
0 голосов
/ 18 апреля 2010

c - это массив указателей. Затем вы пытаетесь назначить один указатель на весь массив.

Попробуйте

char *c = malloc(30 * sizeof(char));

Или, если вам действительно нужно 30 элементов, каждый из которых указывает на массив malloc ed из 30 символов, вам придется сделать цикл.

#define CHUNKSIZE 30
int i;
char *c[CHUNKSIZE];
for (i = 0; i < CHUNKSIZE; i++)
{
    c[i] = malloc(CHUNKSIZE * sizeof(char));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...