2014-11-15 4 views
-3

Хорошо, это важная часть кода. Это только отрывок.Указатели в C не работают должным образом

В steuer.c:

static char (*pointer)[8]; 

extern void test(char *pointer[]); // im not sure, whether this calling is correct 

int main(void) 
{ 
    int i; 
    check = malloc(sizeof(*pointer) *10); 
    for(i=0;i<100;i++) 
     test(check[1]); 
    ... 
} 

в compute.c:

void test(char * compute[]) 
{ 
    char temp="test"; 
    if(strcmp(compute, temp) == 0) 
     return 1; 
    else 
     return 0; 
} 

Проблема: ожидается »символ **«но аргумент типа»полукокса *

Thanks

+2

В коде, который вы опубликовали, имеется множество несвязанных синтаксических ошибок при компиляции с помощью GCC. Это связано с такими проблемами, как отсутствие аргументов после символа «main». Можете ли вы убедиться, что вы разместили правильный исходный код? –

+0

Код - это только выдержка. Точка - это правильная передача от основного к функциональному тесту. – tsid

+1

код - это всего лишь выдержка, но это не совсем компиляция. Если вы запрашиваете справку об ошибке, вы должны указать exceprt или example, который специально вызывает эту ошибку. Например, я получаю ошибки о 'check', которые не объявляются. Я мог бы добавить объявление в свою копию, но решение проблемы действительно требует знания того, как вы объявили 'check'. Аналогично, 'test (check []);' является недопустимым синтаксисом, потому что внутри '[]' ничего нет. Опять же, без этой информации я не могу решить вашу проблему. –

ответ

0

Проблема заключается в том, что вы объявили test аргумент char*[] - массив указателей символов, также известный как массив строк.

В обоих файлах ясно, что вы используете это как указатель на символ - char* - и поэтому должны быть просто строкой.

Вы хотите изменить void test(char * compute[]) на void test(char *compute), чтобы типы работали правильно. (Вы также захотите внести то же изменение в свою другую декларацию.)

-1

пример ...

static char (* pointer)[8]; 

void test1(char * pointer){ ; } 
void test2(char (* pointer)[8]){ ; } 

int main(void){ 
    char (*check)[8] = malloc(sizeof(*pointer) *10); 

    test1(&check[0][0]); 
    test2(check); 

    return 0; 
} 
Смежные вопросы