Jump to content
Fórum Script Brasil
  • 0

Como resolver? IF entre um Vetor e uma String


linguagem_C
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...