edufino 0 Denunciar post Postado Dezembro 18, 2009 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
iCl4w 0 Denunciar post Postado Dezembro 18, 2009 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
Dee 0 Denunciar post Postado Dezembro 19, 2009 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
iCl4w 0 Denunciar post Postado Dezembro 19, 2009 Até concordo com o Dee... E a biblioteca correta é: <string.h> mesmo! Compartilhar este post Link para o post Compartilhar em outros sites
edufino 0 Denunciar post Postado Dezembro 20, 2009 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
VictorCacciari 42 Denunciar post Postado Dezembro 20, 2009 é 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
edufino 0 Denunciar post Postado Dezembro 21, 2009 é 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
quitZAUMMM 18 Denunciar post Postado Janeiro 5, 2010 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
edufino 0 Denunciar post Postado Janeiro 6, 2010 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
quitZAUMMM 18 Denunciar post Postado Janeiro 11, 2010 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites