Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

edufino

[Resolvido] Concatenação de CHAR*

Recommended Posts

Boa tarde pessoal.

 

Estou fazendo um Chat pela porta Serial e tive um probleminha com a concatenação de strings.

Eu já estou pensando até em fazer uma função para fazer isso.

 

 

Isolei a parte do erro, pra ficar mais fácil a compreensão.

 

#include <stdio.h>
#include <windows.h> /*Biblioteca do win para acessar a SERIAL */
#include <conio.h> /* funções como kbhit */

int main (int argc, char * args[])
{
   char BufferEnvia[100] = "";   //Para armazenar a string a ser enviada.
   int caracterEscrito, eu; 
   char *caracter; 
   char *resposta;
   int roda = 1;
 while(roda == 1)
 {        
      /*Escrita*/      
      if(kbhit()) 
      {
            /*CASO tecla apertada = ESC*/         
            if ((caracterEscrito = getch()) == '\x1B')
            {
                 roda = 0;
            }
            /*CASO tecla apertada não for ESC nem ENTER*/         
            else if (caracterEscrito != 13)
            {
                if(!eu)
                {
                     printf("Eu: ");                            
                     eu = 1;
                }
               
                printf("%c",caracterEscrito);
                   
/*---------------------------------------------------------*/

/*Nao consigo fazer esta parte funcionar.
 *Vejamos bem que o "caracterEscrito" tem que vir em ASCII para poder descobrir se é [ESC] ou [ENTER]
 *tentei usar o GetChar(), mas daí o erro dava na hora de comparar */


                strcpy(caracter, (char*)caracterEscrito);
                printf("Copiou");
                resposta =  strcat(BufferEnvia, caracter);            
                printf("concatenou");

 /*Preciso ir juntando em uma string só para depois enviar a mesma pela porta serial
  *esta dentro do while porque o programa fica verificando se tem algo pra ler na porta sempre*/

/*---------------------------------------------------------*/



            }
            /*CASO tecla apertada == ENTER*/         
            else
            {
               printf("\n");
               eu = 0; 
               //strcat(BufferEnvia, "\0");
   
            }
       }
 }
   printf("%s",BufferEnvia);
   system("pause");
}

agradeço qualquer ajuda

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu não posso te ajudar com respeito a esse erro!

 

Mas, eu gostaria muito de ver o resultado pronto!

 

Quando terminar, posta o código na área do fórum! Iria me ajudar pacas...

 

Abçs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao.

O erro está dando nesta linha ? --> strcpy(caracter, (char*)caracterEscrito); ?

Se sim, você nao ta chamando a Biblioteca string.h. Só a stdio, windows e conio.

Que que você ta usando ? DEV C++ ?

 

Adiciona essa biblioteca aqui.

#include <string.h>

Só que eu nao me recordo bem se é string.h ou strings.h.

Faz tempo que nao faço alguma coisa em C.

Tenta ae. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é aqui:

 

strcpy(caracter, (char*)caracterEscrito);

só que não é um problema de include, se não ele não ia nem compilar...

Vocês dizem que o strcpy é da <string.h>?

coloquei agora e deu o mesmo erro,

Eu executo ele, na hora que vai fazer o strcpy da o erro...

 

acho que é algo com o tipo de dado que ele ta trazendo pelo getch()

Compartilhar este post


Link para o post
Compartilhar em outros sites

é claro que o problema é no strcpy...

 

caracterEscrito é um inteiro, que contém o código ASCII de um caractere.

você está fazendo um casting para um char*, que é algo que não faz sentido.

 

simplesmente faça:

caracter = &caracterEscrito

e declare caracterEscrito como char.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é claro que o problema é no strcpy...

 

caracterEscrito é um inteiro, que contém o código ASCII de um caractere.

você está fazendo um casting para um char*, que é algo que não faz sentido.

 

simplesmente faça:

caracter = &caracterEscrito

e declare caracterEscrito como char.

 

 

Victor, obrigado

era exatamente o que eu precisava.

 

Como disse no post, não é que não faça sentido, é que precisava comparar para descobrir se o CHAR não era [ENTER] ou [ESC]

 

agora ele está funcionando, mas acontece uma coisa muito estranha...

 

 

No 3º caracter escrito, ele da uma violação no strcat

pensei que talvez limpando as váriaveis ia funcionar, mas não.

sempre depois do 3º caracter o programa fecha...

 

se mais alguem puder ajudar, fico agradecido

 

segue o código

 

#include <stdio.h>
#include <windows.h> /*Biblioteca do win para acessar a SERIAL */
#include <conio.h> /* funções como kbhit */

int main (int argc, char * args[])
{
   char BufferEnvia[500] = "";   //Para armazenar a string a ser enviada.
   char caracterEscrito;
   int eu = 0; 
   char *caracter; 
   char *resposta;
   int roda = 1;
 while(roda == 1)
 {            
      if(kbhit()) 
      {     
            if ((caracterEscrito = getch()) == '\x1B')
            {
                printf("[ESC]");  
                roda = 0;
            }         
            else if (caracterEscrito != 13)
            {
                if(!eu)
                {
                     printf("Eu: ");                            
                     eu = 1;
                }
                printf("%c",caracterEscrito);
                 
                caracter = &caracterEscrito;
                
                strcat(BufferEnvia, caracter); 
               
/*-----------------------------Adicionei agora, pensei que iria resolver 
*                memset (&caracter, 0, sizeof (caracter)); 
*                memset (&caracterEscrito, 0, sizeof (caracterEscrito)); 
------------------------------------------------------------------------*/
            }   
            else
            {
               printf("\n");
               eu = 0; 
            }
       }
 }
   printf("%s",BufferEnvia);
   system("pause");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... vendo meio q rapido n consegui ver o problema soh vejo q é no momento do strcat, para teste tente isso:

#include <stdio.h>
#include <windows.h> /*Biblioteca do win para acessar a SERIAL */
#include <conio.h> /* funções como kbhit */

int main (int argc, char * args[])
{
   char BufferEnvia[500] = "";   //Para armazenar a string a ser enviada.
   char teste[2]="";
   char caracterEscrito;
   int eu = 0;
   char *caracter;
   char *resposta;
   int roda = 1;
 while(roda == 1)
 {
      if(kbhit())
      {
            if ((caracterEscrito = getch()) == '\x1B')
            {
                printf("[ESC]");
                roda = 0;
            }
            else if (caracterEscrito != 13)
            {
                if(!eu)
                {
                     printf("Eu: ");
                     eu = 1;
                }
                printf("%c",caracterEscrito);

                //caracter = &caracterEscrito;
                teste[0]=caracterEscrito;
                teste[1]='\0';
                strcat(BufferEnvia, teste);
/*-----------------------------Adicionei agora, pensei que iria resolver
*                memset (&caracter, 0, sizeof (caracter));
*                memset (&caracterEscrito, 0, sizeof (caracterEscrito));
------------------------------------------------------------------------*/
            }
            else
            {
               printf("\n");
               eu = 0;
            }
       }
 }
   printf("%s",BufferEnvia);
   system("pause");
}

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... vendo meio q rapido n consegui ver o problema soh vejo q é no momento do strcat, para teste tente isso:

#include <stdio.h>
#include <windows.h> /*Biblioteca do win para acessar a SERIAL */
#include <conio.h> /* funções como kbhit */

int main (int argc, char * args[])
{
   char BufferEnvia[500] = "";   //Para armazenar a string a ser enviada.
   char teste[2]="";
   char caracterEscrito;
   int eu = 0;
   char *caracter;
   char *resposta;
   int roda = 1;
 while(roda == 1)
 {
      if(kbhit())
      {
            if ((caracterEscrito = getch()) == '\x1B')
            {
                printf("[ESC]");
                roda = 0;
            }
            else if (caracterEscrito != 13)
            {
                if(!eu)
                {
                     printf("Eu: ");
                     eu = 1;
                }
                printf("%c",caracterEscrito);

                //caracter = &caracterEscrito;
                teste[0]=caracterEscrito;
                teste[1]='\0';
                strcat(BufferEnvia, teste);
/*-----------------------------Adicionei agora, pensei que iria resolver
*                memset (&caracter, 0, sizeof (caracter));
*                memset (&caracterEscrito, 0, sizeof (caracterEscrito));
------------------------------------------------------------------------*/
            }
            else
            {
               printf("\n");
               eu = 0;
            }
       }
 }
   printf("%s",BufferEnvia);
   system("pause");
}

[]s

 

 

É, valeu quitZAUMMM, pelo visto é isso mesmo, funcionou aqui...

Agora quando chegar em casa vo implementar no chat via porta serial e ele vai funcionar 100%

 

obrigado a todos, problema resolvido!

Grande abraço e um feliz ano novo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.