Вы должны будете знать, чего на самом деле ожидает функция, и соответственно изменить интерфейс. Если он ожидает двумерный массив (char [N][M]
), правильный интерфейс будет:
extern int docx(char *,char*[M]);
Что отличается от:
extern int docx( char*, char** );
В первом случае функция будет ожидать указатель на непрерывный блок памяти, который содержит N*M
символов (&p[0][0]+M == &p[1][0]
и (void*)&p[0][0]==(void*)&p[0]
), тогда как во втором случае она будет ожидать указатель на блок памяти, которая содержит N
указатели на блоки памяти, которые могут быть или не быть смежными (&p[0][0]
и &p[1][0]
не связаны и p[0]==&p[0][0]
)
// case 1
ptr ------> [0123456789...M][0123.........M]...[0123.........M]
// case 2
ptr ------> 0 [ptr] -------> "abcde"
1 [ptr] -------> "another string"
...
N [ptr] -------> "last string"