Ir para conteúdo
Fórum Script Brasil
  • 0

Como resolver? IF entre um Vetor e uma String


linguagem_C

Pergunta

Prezados,

Por favor, estou tendo dificuldades em conseguir comparar o conteúdo de um vetor com uma string (sei que não há string em C, e sim um vetor de char, mas usei este termo apenas para me explicar melhor).

Ocorre o seguinte:

O programa contém as seguintes variáveis globais (vetores de char):

char Buffer[15] = ">ID01RL1#ON*";
char ID[5]=">ID01";
char CMD[10];

Em um segundo momento, o conteúdo da variável Buffer será atribuído a partir de uma informação que será recebido pela porta serial, mas por hora, estou simulando com um conteúdo fixo.

Criei uma rotina chamada Check_ID() que pega os 5 primeiros dígitos do Buffer e compara com a variável ID, se for igual, então o sistema deve prosseguir. Esta rotina será utilizada para identificar se a informação que chegar pela Serial (Buffer) está endereçada para ele.

Criei uma segunda rotina chamada Check_CMD() que pega a partir da 6ª posição do Buffer e vai até o final deste e salva este conteúdo no vetor CMD.

Então no Programa Principal, exatamente na linha 66, eu faço um IF para comparar o conteúdo de CMD com uma informação que deve estar entre aspas duplas, por exemplo: if (CMD == "RL1#ON*").

Neste ponto é que estou tendo dificuldades...

Se eu fizer o seguinte teste:

printf("CMD..: %s, CMD);

O programa imprime exatamente o conteúdo que está sendo informado entre as aspas no IF, porém, o if me retorna FALSE.

A pergunta é:

Como devo fazer esta validação? (Visto que CMD é um vetor de char).

Abaixo está TODO o código para que possam entender melhor o que foi dito acima.

Desde já agradeço a todos que puderem me ajudar.

Obs.: Estou testando o código no TurboC.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

//Variáveis Globais
char Buffer[15] = ">ID01RL1#ON*";
char ID[5]=">ID01";
char CMD[10];

/********************
** Check_ID()
** Pega os 5 primeiros dígitos da String para verificar se ‚ o ID correto
** Recebe Buffer como parâmetro
** Retorna 0 para ID Incorreto; 1 para ID Correto
**/
int Check_ID(char bfr[15])
{
	char ID_tmp[5];
	int status=0;

	//Coleta ID (5 primeiros caracteres do Vetor bfr e salva em ID_tmp)
	strncpy(ID_tmp, bfr, 5);
	ID_tmp[5] = '\0';	//Adiciona caracter delimitador

	//Valida vetor (cada posicao)
	for(int i=0; i<5; i++)
	{
		if(ID_tmp[i] == ID[i])	status = 1;
		else                    status = 0;
	}

	//Retorna 1 para ID Correto, 0 para ID Incorreto
	return status;
}



/********************
** Check_CMD()
** Pega os ultimos dígitos da String a partir do 6º para verificar o comando
**/
void Check_CMD(char bfr[15])
{
	//Coleta Comando (Os Últimos caracteres da String)
	for(int i=5; i <15; i++)
	{
		CMD[i-5] = bfr[i];
	}
}


//Programa Principal
void main(){
	clrscr();

	//Verifica ID
	if (Check_ID(Buffer) == 1)
	{
		printf("ID Correto");

		//Coleta Comando da String
		Check_CMD(Buffer);

		//Se comando "OK", então Executa-o
		if (CMD == "RL1#ON*")
		{
			printf("\nCMD.: %s", CMD);
			printf("\n\nComando OK!!!");

		} //Fim do IF (Teste de Comando)

	}//Fim do IF (Check_ID)

	puts("\n\n");
	system("PAUSE");

}//Fim do programa Principal: void main()

Muito obrigado e forte abraço!!!

HFP

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Prezados,

Com um pouco de paciência eu consegui resolver esta dúvida.

De qualquer forma, agradeço muito aos que analisaram e de uma forma ou de outra tentaram achar uma solução.

Resolvi da seguinte maneira:

Na linha 66, alterei a expressão do "if", utilizando o "strcmp" que é uma função específica para comparar duas strings (ou vetores de char).

Segue a expressão corrigida:

if (strcmp(CMD, "RL1#ON*") == 0)

Problema resolvido!

Obrigado...

Abraços,

HFP

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...