Olá eu gostaria de retorna um vetor para a main e imprimer ele mais n consigo
1 resposta
T
Tutassauro
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
charfunc(inttamanho);intmain(){setlocale(LC_ALL,"Portuguese");inttamanho;printf("Digite o tamanho do vetor: ");scanf("%d",&tamanho);func(tamanho);printf("%s",vetor[i]);}charfunc(inttamanhovetor){inti;charvetor[i];for(i=0;i<tamanhovetor;i++){printf("fale o numero a ser armazenado no vetor: ");scanf("%s",&vetor[i]);}return(vetor[i]);}
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.