sou novo na programação e gostaria de retornar um vetor de dentro de um função e imprimir ele na main principal mais n estou conseguindo
char func(int tamanho);
int main(){
setlocale(LC_ALL, "Portuguese");
int tamanho;
printf("Digite o tamanho do vetor: ");
scanf("%d", &tamanho);
func(tamanho);
printf("%s", vetor[i]);
}
char func(int tamanhovetor)
{
int i;
char vetor[i];
for (i = 0; i < tamanhovetor; i++)
{
printf("fale o numero a ser armazenado no vetor: ");
scanf("%s", &vetor[i]);
}
return(vetor[i]);
}
Ola
não é possivel retornar um array propriamente dito por conta da forma como o C usa a pilha de retorno.
vc pode retornar um ponteiro. porém aqui entra um problema: quando vc declara vetor[ tamanho ] isso existe apenas dentro do bloco lexico (no caso, func). saiu do bloco lexico a variavel não é mais visivel. pior quando a função terminar toda a memoria que foi alocada no processo fica disponivel para ser usada de novo portanto é PERIGOSO vc retornar um ponteiro pra uma variavel local.
vc tem duas opções:
-
vc aloca dinamicamente memoria via malloc dentro de func e retorna o ponteiro ‘vetor’. lembre-se de desalocar a memoria com free ao final ( desnecessario pois o processo vai acabar e tudo vai ser liberado MAS é boa pratica pensar que todo o malloc exige um free.
-
vc declara o vetor dentro de main e passa o endereço de memoria dele para func.
agora tem um problema: para declarar um vetor vc precisa saber o tamanho do mesmo. tudo leva a crer que vc precisa usar malloc pra resolver o seu problema.
agora por favor, observa que vetor[i] é “o elemento i do vetor”, então nao faz sentido vc usar isso quando vai declarar ou quando vai retornar. vc aparentemente precisa praticar mais C + arrays e o meu conselho é praticar bastante até que vc entenda como isso funciona antes de separar o seu codigo em diferentes funções. vc esta colocando “o carro na frente dos bois” desse jeito. pra vc ter uma ideia eu comecei a carreira programando em C 18 anos atrás e mesmo hoje eu não consigo fazer determinadas coisas sem olhar na documentação e sem encontrar warnings/erros inesperados. praticar é preciso!
eu acredito que o seu codigo nem compila ( ou vai gerar diferentes warnings ). tente estudar sobre cada erro de compilação e warning que vc vê ( joga no google a mensagem ) que vc vai aprendendo como evitar cada coisa.