2015-01-14 4 views
-1

Я рассказываю, что это, вероятно, совершенно нулевой вопрос, но мне нужно создать массив типа 'char **', потому что это тип параметра, который я использую для запроса. После этого мне нужно сделать каждый элемент этого массива ссылкой. Я открыт для возможности того, что это даже не представляется возможным, но до сих пор это то, что я пытался, и в результате получил ошибку нарушения прав доступа:Создание указателя на указательный массив

char **array[10]; 
    *array[1] = ".\\images\\cockroach\\1.png"; 
    *array[2] = ".\\images\\cockroach\\1.png"; 
    *array[3] = ".\\images\\cockroach\\1.png"; 
    *array[4] = ".\\images\\cockroach\\1.png"; 
    *array[5] = ".\\images\\cockroach\\1.png"; 
    *array[6] = ".\\images\\cockroach\\1.png"; 
    *array[7] = ".\\images\\cockroach\\1.png"; 
    *array[8] = ".\\images\\cockroach\\1.png"; 

Вот функция вопроса:

Enemytype makeenemy(int hp, int xcor, int ycor, int width, int height, int speed, int a1, int a2, char *imagel[10], char *imaged[10]) 
{ 
    int i = 0; 
    int j = 0; 
    Enemytype m; 
    m.width = width; 
    m.height = height; 
    m.xcor = xcor; 
    m.ycor = ycor; 
    m.speed = speed; 
    m.hp = hp; 
    m.a1 = a1; 
    m.a2 = a2; 
    while (imagel[i]){ 
     m.arrayl[i] = Loadtext(imagel[i]); 
     i ++ ; 
    } 
    while (imaged[j]){ 
     m.arrayd[j] = Loadtext(imaged[j]); 
     j++; 
    } 
    return m; 
} 

Дело в том, чтобы создать шаблон с массивом изображений, не зная первоначально, сколько изображений он будет иметь. Loadtext(char* filename) - это функция, которая создает изображение из данной ссылки. В результате он просит меня «char **».

+0

ваши указатели не инициализируются ... если вам нужно '' символ **, почему вы не просто сделать массив из 10 'полукокса *' ы затем захватить указатель на его первый элемент? –

+0

Не могли бы вы показать прототип данной функции? Кажется, он требует 'char **', а не 'char ** [10]'. – Jarod42

+1

Это вопрос о C, а не о C++. Я не вижу ни одного C++ в вашем вопросе –

ответ

1

Вы близко, у вас просто есть * слишком много на каждой линии.

const char *array[10]; 
array[0] = ".\\images\\cockroach\\1.png"; 
array[2] = ".\\images\\cockroach\\1.png"; 
array[3] = ".\\images\\cockroach\\1.png"; 
array[4] = ".\\images\\cockroach\\1.png"; 
array[5] = ".\\images\\cockroach\\1.png"; 
array[6] = ".\\images\\cockroach\\1.png"; 
array[7] = ".\\images\\cockroach\\1.png"; 
array[9] = ".\\images\\cockroach\\1.png"; 
+0

, если я это сделаю, функция скажет мне, что 'const char *' несовместим с 'char **' – seMikel

+1

Ну, сделайте ваши другие функции const правильными. Наше пребывание делает копии ваших строк. Но строковые литералы - только для чтения. –

+0

Опечатка: '9' должно быть' 8'. и в соответствии с данным кодом 'array [9] = NULL'. – Jarod42

Смежные вопросы