Ark Postado Novembro 27, 2008 Denunciar Share Postado Novembro 27, 2008 Galera, desculpe a ignorancia, mas porque eu não consigo retornar um vetor de inteiros de uma função, quando eu posso retornar vetor de char(string)?Obrigado pela atenção.Abraço a todos. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 27, 2008 Denunciar Share Postado Novembro 27, 2008 não entendi... qual o codigo q você ta usando q não ta dando??você ta dando return da matriz na funcao, ou ta alterando o parametro (por referencia)?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ark Postado Novembro 28, 2008 Autor Denunciar Share Postado Novembro 28, 2008 Desculpa cara eu acho que eu não soube me expressar direito, então, é...vou decompor a minha pergunta em 2:1. Não tem como mesmo eu retornar ponteiro pra var local de uma função pra main?2. O C faz alguma distinção especial entre matriz de char(strings) e matrizes de outros tipos, como int?Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 1. Não tem como mesmo eu retornar ponteiro pra var local de uma função pra main?Se eu entendi bem a pergunta, o que você quer fazer é isto:#include <stdio.h> #include <stdlib.h> #include <string.h> char * return_str() { char str[] = "Beraldo"; return str; } int main() { char str[10]; strcpy(str, return_str()); printf("%s\n", str); return 0; } Isso não funciona. Veja a saída: $ gcc -Wall teste2.c -o teste2 && ./teste2 teste2.c: Na função ‘return_str’: teste2.c:9: aviso: function returns address of local variable ՜6O programa compila, mas o valor de str não é definido.2. O C faz alguma distinção especial entre matriz de char(strings) e matrizes de outros tipos, como int?Não sei se entendi bem essa pergunta...Cada tipo de dado possui um determinado tamanho. Isso varia conforme a arquitetura do computador.Isso é uma diferença entre int e char. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ark Postado Novembro 28, 2008 Autor Denunciar Share Postado Novembro 28, 2008 (editado) Cada tipo de dado possui um determinado tamanho. Isso varia conforme a arquitetura do computador.Isso é uma diferença entre int e char.cara, peço desculpas se eu não fui tão claro. Hum, é que eu achava que o compilador meio que tratava strings de uma forma mais especial que matrizes de outros tipos, até pelo fato de ter funções pra manipular strings tão bem como se fossem tipos de dados string mesmo. Acho que eu viajei, no fundo é só char mesmo, heheheAproveitando o tópico sobre matrizes, eu queria que alguém me ajudasse numa coisa, eu não sei se dá, mas eu posso trabalhar a aritimética de ponteiros com um ponteiro apontando pra matriz inteira?Tipo, eu posso fazer isso:#include <stdio.h> main(){ int *p1, x, mat[15]; p1 = mat; for(x=0;x<15;x++) scanf("%d", &mat[x]); while(*p1){ printf("%d ", *p1); p1+=sizeof(int); } getch(); }Com char eu incremento o ponteiro em 1 mas e com int faz assim mesmo, porque aqui tá dando erro na hora que eu executo o código, na hora de imprimir aparece só "lixo", uns numeros enormes.Abraço. Editado Novembro 28, 2008 por Ark Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 Isso não funciona. Veja a saída:$ gcc -Wall teste2.c -o teste2 && ./teste2teste2.c: Na função ‘return_str’:teste2.c:9: aviso: function returns address of local variable�՜6�[/code] O programa compila, mas o valor de str não é definido. ue, pra mim funciona sim, alem de q se você aloca o espaco, ele para de dar warning. veja só: [code]#include <stdio.h>#include <stdlib.h>#include <string.h>char *return_str(){ char *str = new char[15]; str = "kuroi"; return str; }int main(){ char *str; str = return_str(); printf("%s\n", str); delete str; return 0;} ark, esse while(*p1) acho q não vai funcionar... acontece q as strings são fechadas com o \ 0 e por isso funciona. com int você vai ter q usar o contador. fora isso, não precisa somar o sizeof. é so somar 1, acho q porque como o p1 ta declarado como pontero de int, ele entende q esse 1 significa mais 1 int e não simplesmente mais um byte. assim: for(x = 0; x < 5; x++){ printf("%d\n", *p1); p1 += 1; }[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 Funciona somente se você alocar espaço.Funcionou aí do jeito que o Beraldo passou? Praticamente impossível.Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 então... tb achei estranho mas... funcionou sim... sem zuera...no dev c++ aqui. compilei o codigo igualzinho, só adicionei o conio.h e um getch() antes do return.ele deu o warning:[Warning] address of local variable `str' returnedmas apareceu escrito beraldo...mas então durub... acho q era pra funcionar sim... tipo, não funciona se eu der o prinft direto. mas com o strcpy funciona sim. não sei como funciona o strcpy internamente, mas acho q ele consegue copiar de alguma forma antes do valor se perder.pelo menos aqui no dev c++ ta indo... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ark Postado Novembro 28, 2008 Autor Denunciar Share Postado Novembro 28, 2008 Valeu pelas respostas galera, superei meu trauma de ponteiros para int heheheAbraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ark
Galera, desculpe a ignorancia, mas porque eu não consigo retornar um vetor de inteiros de uma função, quando eu posso retornar vetor de char(string)?
Obrigado pela atenção.
Abraço a todos.
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.