Moderadores: 51, guest2003, brasilma
brasilma escreveu:Como fazer para passar para uma função uma string com tamanho variável?
void trata_string (char *string)
Tendo sido recebida esta string pela função, como calculo o comprimento da mesma?
#include <string.h>
void main ( void )
{
char mensagem[] = "Minha String";
int comprimento = 0;
comprimento = strlen ( mensagem ); //atribui à "comprimento", o tamanho da string MENSAGEM
while ( 1 );
}
Como posso pegar cada uma das letras?
#include <string.h>
void main ( void )
{
char mensagem[] = "Minha String";
char caractere_string;
caractere_string = mensagem[4]; // caractere "a"
caractere_string = mensagem[0]; // caractere "M"
caractere_string = mensagem[8]; // caractere "r"
caractere_string = mensagem[11]; // caractere "g"
while ( 1 );
}
Como determino o código ascii de cada uma destas letras?
Desde já obrigado pela paciência!!!
/*************************************************************************
FUNCAO: MsgTemp
PARAMETROS: msg, e valores dos parâmetros
RETORNO: NENHUM
DESCRICAO: MOSTRA MENSAGEM TEMPORIZADA COM O TEMPO TEMPO_MSG_TMP
OBS: PARAMETROS ACEITOS:
'\f' - LIMPA TODA A TELA;
'%d' - IMPRIME O NUMERO PASSADO EM DECIMAL, COM 2 OU 3 CASAS;
IMPRIME COM 3 CASAS SE O NUMERO FOR MAIOR QUE 99;
'%s' - IMPRIME A STRING PASSADA ATÉ ENCONTRAR UM CARACTER NULO;
'%' - IMPRIME O CARACTER '%'.
**************************************************************************/
void MsgTemp (byte code *msg, ...)
{
va_list param; // Lista de parâmetros
byte byte_temp;
va_start(param, msg); // Inicia o ponteiro da lista de parâmetros
while (*msg)
{
if (*msg == '\f')
wrLCDcom ( CLRDSP ); // Limpa a tela
else
if (*msg == '%')
{
msg++;
if (*msg == 'd')
{
byte_temp = va_arg(param, byte);
if (byte_temp / 100) wrLCDdata( HexaAscii(byte_temp / 100) ); // Se numero maior de 100 escreva com 3 casas.
wrLCDdata( HexaAscii( (byte_temp % 100) / 10) ); // Senão escreva com 2.
wrLCDdata( HexaAscii(byte_temp % 10) ); // Senão escreva com 2.
}
else
if (*msg == 's')
{
byte *ptr_str = va_arg(param, byte *); // Defina um ponteiro para acesso a string
while (*ptr_str)
wrLCDdata(*ptr_str++);
}
else
wrLCDdata('%'); // % sozinho
}
else
wrLCDdata(*msg); // Imprima o caracter
msg++;
}
va_end (param); // Finaliza o ponteiro da lista de parâmetros
tmp_tela_tmp = TEMPO_MSG_TMP;
flag_espera_tela = TRUE;
}
Apesar de se ter um completo domínio da máquina em assembler, a sensação passada por uma linguagem de alto nível é de se escrever em uma linha, várias linhas, passando uma impressão de poder danado.
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante