Я видел похожие посты, связанные с моим вопросом, но я не смог найти никакого ответа, чтобы понять ошибку в этом коде.
Итак, у меня есть функция, тип возвращаемого значения не может быть изменен (для случая 1). Для случая 2 я хотел бы знать, как вернуть char *a[]
;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **myfunc(int n) {
char **a = malloc(n * sizeof(char *));
int i, j = 1;
for (i = 0; i < n; i++)
a[i] = malloc(9 * sizeof(char));
for (i = 0; i < n; i++) {
snprintf(a[i], 5, "%d", i);
return a;
}
int main() {
int num = 10, i;
char **ar = myfunc(num);
for (i = 0; i < num; i++)
printf("%s\n", ar[i]);
return 0;
}
1) Как в myfunc()
как мне правильно вернуть a
? Мой компилятор выдает мне предупреждение, которое возвращает из несовместимого типа указателя.
2) Если я изменю свой выше myfunc()
следующим образом, как я должен вернуть измененный буфер?
char ???myfunc(int n) {
char *a[n];
for (i = 0; i < n; i++)
a[i] = malloc(10 * sizeof(char));
return ?
}
3) Как в обоих случаях обрабатывать возврат внутри функции main()
?
Случай 2:
char *myfunc(int n) {
static char *a[n];
int i;
for (i = 0; i < n; i++)
a[i] = malloc(9 * sizeof(char));
for (i = 0; i < n; i++)
snprintf(a[i], 5, "%d", i);
return a;
}
int main() {
int num = 10, i;
char *ar = myfunc(num);
for (i = 0; i < num; i++)
printf("%s\n", ar[i]);
return 0;
}