У меня есть предупреждение при передаче массива указателей (char **) в качестве аргумента типа void ** в функцию.
Ниже приведен мой код.Я использую компилятор gcc, он выдает мне следующее предупреждение:
"предупреждение: передача аргумента 1 'print' из несовместимого типа указателя [включено по умолчанию]".
Он указывает на эту строку print(lineptr, 2);
И еще одно предупреждение гласит:
предупреждение: формат "% s" ожидает аргумент типа "char *", но аргумент 2 имеет тип "void * '.
И он указывает на эту строку printf("%s\n", *v++);
Я попытался заменить все void**
на char**
, и это хорошо работает.
Причина, по которой я хочу использовать void**
, заключается в том, что я пишу функцию быстрой сортировки, которая может принимать как символьные, так и целочисленные массивы.
#include <stdio.h>
char *lineptr[100] = {"mister", "x"};
void print(void **, int n);
int main()
{
print(lineptr, 2);
return 0;
}
void print(void **v, int n)
{
while( n-- > 0 )
printf("%s\n", *v++);
}
Вопрос в том, влияет ли это предупреждение на что-нибудь?
Теперь у меня нет проблем с запуском кода и получением желаемого результата, но я спрашиваю, гарантированно ли каждый раз будет работать этот метод.
Заранее спасибо!