Ir para o conteúdo
Cypher

[Resolvido] Funcao para tirar caracter da string!!

Mensagens Recomendadas

Cypher    0
Cypher

Boas !!!

gostava que alguem desse aqui uma olhadinha ao meu codigo !!

ex:

cria tirar da palavra "P@P" primeiro o "p" depois o "@" e o ultimo "p" esta aki a minha funcao , mas esta qualquer coisa mal na minha funçao da erro!

char *sacar_p(char *s,int i){
char p[1];
strcpy(p,s[i]);
return p; 
}

a variavel i era o indice por exemplo metia ao enviar pra funcao i=3 e tirava o "p"  de "p@p"

o que se passa esta bem a funçao??

cumps....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

strcpy(p,s);

Copiar um caracter para um char* !!

Devem ser ambos char* de preferência que acabem com um caracter nulo.

Não é correcto retornar um ponteiro cujo scope está apenas no bloco da função. Já tem sido comentado este aspecto algumas vezes aqui no forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Cypher    0
Cypher

Melhor... qual é a ideia de usar uma função destas?

queres o 3º caracter de "p@p": s[ 2 ];

  :confused: era so um exemplo...

a ideia era mesmo numa codificacao de canal fazer a matriz de paridade e tirar de uma bitstream os caracteres !!

ja percebi o vosso ponto de vista ... e nao tem logica é a maneira que eu meti o topico!!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
LakOr    0
LakOr

Já não vai a tempo , mas ficas a saber  :)

é simples... tas a usar a função strcpy, logo vais copiar 2 strings, se lhe tas  a dar como segundo argumento um caracter logo da erro (s [ i] )  :wallbash:

tens de fzr tipo isto:

declaras uma variavel do genero:

char ch[2];
ch[0]=s[i];
ch[1]='\0';
strcpy(pra_onde_keres_copiar, ch);

assim ja não da erro porque tas a copiar uma string...

Cumps  :D

P.S: Pa proxima vens ao msn e perguntas  :cheesygrin:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bertolo    0
bertolo

mete dentro do strcpy assim: (p,s[i-1]), ja fica td bem, tendo em conta que estas a passar bem os parametros da funçao.

o erro que estão aí a falar dá page fault se o ppl tiver razao, se o ppl nao tiver razao, e continuar a dar erro e pq tas a passar mal as cenas para  funçao.

Se tivesses a passar o inteiro usando o stringcopy tenho a certeza que dá page fault, mas como a funçao recebe dois apontador para char nao deve dar erro nenhum, nao faz sentido, tanto podes mandar strings como chars.

[]

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Uau... desculpem lá o mau feitio, mas porque continuam a responder se a questão já foi esclarecida, e ele até viu que pegou no problema da forma errada? Os dois últimos posts só aumentam a confusão: o 1º complica, e o 2º está errado.

Além disso, o erro do post do bertolo é explicado no post do LakOr. Mas ainda assim eu vou repetir:

strcpy(p, s[i-1]);

sendo s um array de chars não funciona porque s[i-1] é um char, e não um char*. O que é enviado à função é o valor do char da posição i-1 de s. Quando muito, poder-se-ia fazer

strcpy(p, &s[i-1]);

. Mas isto também era errado, porque iria copiar para p todos os caracteres de s a partir da posição i-1, até encontrar o caracter terminador de s.

Como já foi dito (e entendido), a função não devia existir, mas a existir devia ser (redundante e) simplesmente

char *sacar_p(char *s,int i){
return s[i];
}

como a funçao recebe dois apontador para char nao deve dar erro nenhum, nao faz sentido, tanto podes mandar strings como chars.

Podes mandar apontadores para char, só apontadores.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bertolo    0
bertolo

o que eu disse nao tava mal eu so disse que caso ele enviasse char nao tenhoa  certeza se dava erro, agora se ele enviar inteiro da page fault com toda a certeza (exp propria).

concordo com a tua soluçao.

btw a funçao q o rapaz ai postou so mostra que ele tem de estudar passagem por referencia pq nao faz sentido passar por referencia e retornar ao mesmo tempo. gg

ps: ist > isel :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bertolo    0
bertolo

discordo totalmente...lê cap 9 do damas pag 311. consegues passar variaveis por referencia em C senao vê a funçao strcpy do string.h.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Já que referencias o livro do Damas, vai à página 312. Está lá bem específico:

EM C SÓ EXISTE PASSAGEM DE PARÂMETROS POR VALOR

E depois diz que a salvação é passar Apontadores.

Ah grande Damas. Apontadores, e não ponteiros. É assim mesmo!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bertolo    0
bertolo

qd passas um endereço e, nao uma copia de alguma cena...e depois na funçao ou metes duplo ** ou metes * e * na funçao (como tem aki este post inicial) chama.s passagem por referencia. tens de ler o damas...ele diz isso precisamente  numa linha em rodape, agora isso n quer dizer q n possas passar variaveis por referencia em C, coisa q eu tou farto de fazer.

lol tá a negrito e tudo.....atao explica-me o que faz uma funçao deste tipo

char *siga(char *a);

eu acho: que recebo uma referencia (endereço da var), e sem criar uma copia explicitamente da variavel eu consigo altera-la.

e verdade q nao sao alterados os valores dos endereços...mas qd ao valor da variavel esse podes alterar utilizando a sua referecia (endereço)

eu sou caloiro...e normal q o diga está errado :)

tamos aki e pa aprender

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Reformulando. Dado que não percebi o teu post anterior, vamos ver se nos entendemos.

char *sacar_p();

é a assinatura de uma função que retorna um apontador para char, e não uma referência para char. Já

char &sacar_p();

, que, friso, é código C++, e é impossível em C, é a assinatura de uma função que retorna uma referência para char.

Quanto aos parâmetros é a mesma coisa:

void func(char *pc);

recebe como parâmetro um apontador para char, e para alterares o seu conteúdo fazes

*pc='c';

.

void func(char &c);

que, mais uma vez, é código C++, e é impossível em C, recebe como parâmetro uma referência para char, e para a usares fazes

c='c';

.

E a diferença entre referências e apontadores está aí. Não há mistura entre os dois, como é dito no livro do Luís Damas: a passagem de apontadores é uma forma de contornar a inexistência do conceito de "passagem por referência" em C.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Cypher    0
Cypher

Eu acho que o TheDark tem razao... porque é que continuam a responder ao topico ... ja tinha dito no meu ultimo que tava a fazer confusao e nao tinha logica nenhuma a pergunta que fiz ...

cumps...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HecKel    52
HecKel

Eu acho que o TheDark tem razao... porque é que continuam a responder ao topico ... ja tinha dito no meu ultimo que tava a fazer confusao e nao tinha logica nenhuma a pergunta que fiz ...

cumps...

Resolvido :)

abraços, HecKel

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Convidado
Este tópico está fechado a novas respostas.

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade