GibaZoro 0 Denunciar post Postado Abril 11, 2012 Olá, estou tendo problemas com o seguinte execício: A partir de duas strings quaisquer, informar o número de caracteres da concatenação das duas strings. Obs.1: Estou apanhando da forma do qual o scanf lê strings de tamanho indefinido, não pretendo usar gets(), li que esta função pode trazer problemas na alocação de memória. Obs.2: Usando a biblioteca <string.h> creio que ficaria mais fácil, porém quero que seja apenas usando ponteiros. Desde já agradeço a atenção!! O código que fiz postei abaixo, mas ele está com muitos erros do qual não estou conseguindo corrigir. #include<stdio.h> #include<stdlib.h> int main(){ int n, m, contador1, contador2, total; char *pstring1, *pstring2; char string1[n], string2[m]; pstring1 = (char *)(malloc(n*sizeof(char)));// alocar espaço para a string que será informada if (pstring1 == NULL){ printf ("\nErro de alocacao de memoria."); return 1; } pstring2 = (char *)(malloc(m*sizeof(char)));// alocar espaço para a string que será informada if (pstring2 == NULL){ printf ("\nErro de alocacao de memoria."); return 1; } printf ("Digite uma frase: "); scanf ("%s",&string1[n]); printf ("Digite outra frase: "); scanf ("%s",&string2[m]); contador1 = 0; contador2 = 0; while (*pstring1 != "\0"){// contar os caracteres da primeira string if (*pstring1 != " "){ contador1++; pstring1++; } return contador1; } while (*pstring2 != "\0"){// contar os caracteres da segunda string if (*pstring2 != " "){ contador2++; pstring2++; } return contador2; } total = contador1 + contador2; printf ("O total de caracteres nas duas strings eh de: %d ",total); free (pstring1); free (pstring2); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Abril 11, 2012 GibaZoro, A sua alocação dinâmica está errada. Você está alocando as strings com o tamanho definido por "n" e "m". Só que você se quer inicializou estas variáveis, elas podem ter qualquer valor, até um -52316848925. Mesmo para alocação dinâmica você precisa definir um tamanho. Pois apesar de reservar o espaço apenas em tempo de execução, o compilador não tem como adivinhar a quantidade que você quer... =) Acho que neste caso, como não tem como saber o tamanho das strings e portanto o espaço a ser alocado não pode ser definido. O melhor é utilizar a string.h e os métodos dela para recuperar o tamanho, por exemplo. Espero ter ajudado, FLW! Compartilhar este post Link para o post Compartilhar em outros sites
GibaZoro 0 Denunciar post Postado Abril 14, 2012 GBecker, eu entendi o que você quis dizer, porém perguntei ao meu professor da faculdade, ele disse que não quer que use a biblioteca <string.h>, você sabe alguma forma que eu poderia fazer sem usá-la! Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 14, 2012 Obs.1: Estou apanhando da forma do qual o scanf lê strings de tamanho indefinido, não pretendo usar gets(), li que esta função pode trazer problemas na alocação de memória. O problema do gets() é justamente que ele lê strings de tamanho indefinido. Você deve estabelecer um tamanho para a string e usar fgets() para pegar até um limite. Para fazer a concatenação de 2 strings, você deve fazer um loop para pegar o tamanho de cada uma das 2 strings (esse tamanho no caso excluiria o último caractere, o '\0') e somar eles. Um exemplo: #include <stdio.h> int main(void) { char string1[] = "Matar é feio."; char string2[] = "Mas é uma realidade."; char *p; int tamanho_string, tamanho_final; for(p = string1, tamanho_string = 0; *p; ++p, ++tamanho_string); tamanho_final = tamanho_string; for(p = string2, tamanho_string = 0; *p; ++p, ++tamanho_string); tamanho_final += tamanho_string; printf("O tamanho das 2 strings somadas é: %d\n", tamanho_final); return 0; } Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
GibaZoro 0 Denunciar post Postado Abril 14, 2012 Renato, muito obrigado, ajudou a esclarecer algumas paradas que eu estava em dúvidas! Muito obrigado! Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 14, 2012 Beleza, to aqui pra ajudar mesmo xD Qualquer dúvida, só postar... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites