LINUX.ORG.RU

Char ** vs Char (*)[255]

 


0

1

Нужно послать в функцию указатель на char A[255]. Какая сигнатура должна быть у функции? Попробовал так:

int getPair(char * line, int index,
                  char * p1[255],
                  char * p2[255])

Ругается:

./parser/xxx.c:5206: expected 'char **' but argument is of type 'char (*)[255]'
 int getPair(char * line, int index,
           ^

Вызвал так:

    char part1[255];
    char part2[255];

    CHECKLOC(getPair(line, index, &part1, &part2));

★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Правильно будет передавать и принимать char *.

int getPair(char * line, int index,
                  char * p1,
                  char * p2);

    char part1[255];
    char part2[255];

    CHECKLOC(getPair(line, index, part1, part2));
Krieger_Od ★★
()
int getPair(char * line, int index,
                  char (*p1)[255],
                  char (*p2)[255])

?

char * p1[255]

читается как массив из 255-ти указателей на char, а не указатель на массив из 255-ти char.

backbone ★★★★★
()
Последнее исправление: backbone (всего исправлений: 1)
int getPair(char * line, int index,
                  char * p1[255],
                  char * p2[255]){

return index++;
 }


int main(){

  char* x[255];
  char* ch;
  getPair(ch, 10, x, x);

}

Никаких проблем ни с компиляцией, ни с запуском программы. Вывод: проблема в опциях или баге вашего компилера.

next_time ★★★★★
()
void func(char arr[256]) {

}

int main ()
{
    char  arr[256];

    func(arr);
}

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)

Либо char p1[255], либо char *p1. В данном контексте массив эквивалентен указателю.

intelfx ★★★★★
()
Ответ на: комментарий от next_time

char * p1[255]

Это ж массив указателей! Ты что ж делаешь, негодяй?!

К тому же, какие у тебя проблемы могут возникнуть с запуском программы, когда ты в ней ничего не делаешь? Передал ты два массива с нулёвыми указателями и ещё один указатель. И что ты этим хотел доказать?!

Deleted
()
Ответ на: комментарий от Deleted

Передал ты два массива с нулёвыми указателями и ещё один указатель. И что ты этим хотел доказать?!

то, что оно линкуется

Это ж массив указателей! Ты что ж делаешь, негодяй?!

это не я, это автор топика. не знаю, зачем ему это нужно. но сам я вообще никогда подобным образом не пишу.

К тому же, какие у тебя проблемы могут возникнуть с запуском программы, когда ты в ней ничего не делаешь?

ну помещу я в программу обработку входных данных. что-то изменится?

next_time ★★★★★
()
Ответ на: комментарий от next_time

ну помещу я в программу обработку входных данных. что-то изменится?

Сегфолт при попытке что-либо сделать.

это не я, это автор топика. не знаю, зачем ему это нужно. но сам я вообще никогда подобным образом не пишу.

То есть, ты увидел идиотизм и решил его поддержать? Умно.

Deleted
()

char * p1[255]

Это 255 указателей на символ. И почему 255? Логичнее 256.

Deleted
()
Ответ на: комментарий от Deleted

Сегфолт при попытке что-либо сделать.

вы не поверите, но приведённая версия — укороченная. я не только запустил, но и «попробовал что-то сделать» — сегфолта не произошло

То есть, ты увидел идиотизм и решил его поддержать? Умно.

нет. я отвечал на вопрос ТС-а

next_time ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.