Ir ao conteúdo

Lixo aparecendo


Caique Portela

Posts recomendados

Postado

Estou fazendo um programa em C que irá receber dados de um arduino por cabo Serial. O problema é que está aparecendo lixo na tela. Print:

v8Vmdfa.png

Vocês podem observar olhando no terminal, até alinha que exibi `66006C15554A`(linha 70 no código) está correto, ai depois aquele código que aparece é algum lixo à toa.

Aquela frase que aparece logo depois também é normal (linha 96 do código).

Depois exibo novamente aquele primeiro código (linha 97).

Ai aparece aquele primeiro lixo novamente junto com uma query que executei, porém em nenhum momento eu exibi ela (entenda mais sobre ela vendo da linha 73 até a 77). E só para avisar, na query eu coloco vários `%c` e coloco cada valor do vetor pois se eu colocar apenas um `%s` a query fica com erros (basicamente ela se repete 2 vezes e não exibi o valor de %s que passo).

E aparece o valor 14 que é da varável i (linha 98 do código) apenas para uma verificação do loop.

Alguém sabe porque esses lixos aparecem e como resolver?? Se possível ajuda a resolver o problema na query também.

Obs: Sou iniciante em C porém estou disposta aprender, desde que não venha com ignorância.

Obs2: Caso necessite, deixo um link para download do código: https://docs.google.com/file/d/0Bxy0rT5rjqidNjY4V2owX0dsRlU/edit?usp=sharing

https://docs.google.com/file/d/0Bxy0rT5rjqidajJjNlZYNzIyalk/edit?usp=sharing

Postado

Caique,

Strings em C terminam em nulo '\0'. Ou seja, você tem os caracteres que compõem a string e mais um caractere nulo ('\0') para terminá-la.

Como você parece querer tratar o array tes[12] como uma string (ao imprimi-la com a máscara %s), seria adequado declarar:

char tes[13];

e, ao final daquele laço for, incluir o nulo:

tes[12] = '\0';

Outra coisa, naquele seu laço de repetição, você está acessando uma posição além do limite do array. Se você declarou um array com 12 posições, as posições de acesso válidas vão de 0 a 11 (= 12 posições no total).

Então, para resumir: 0 a 11 são os caracteres; a posição 12 recebe o nulo (mostrado acima).

Corrigido esse problema, poderá usar a máscara %s no sprintf() normalmente.

Para comparar strings em C, use a função strcmp(). Não dá pra fazer if (strin1 == strin2) etc.

[]'s

LNW

Postado
Caique,

Strings em C terminam em nulo '\0'. Ou seja, você tem os caracteres que compõem a string e mais um caractere nulo ('\0') para terminá-la.

Como você parece querer tratar o array tes[12] como uma string (ao imprimi-la com a máscara %s), seria adequado declarar:

char tes[13];

e, ao final daquele laço for, incluir o nulo:

tes[12] = '\0';

Outra coisa, naquele seu laço de repetição, você está acessando uma posição além do limite do array. Se você declarou um array com 12 posições, as posições de acesso válidas vão de 0 a 11 (= 12 posições no total).

Então, para resumir: 0 a 11 são os caracteres; a posição 12 recebe o nulo (mostrado acima).

Corrigido esse problema, poderá usar a máscara %s no sprintf() normalmente.

Para comparar strings em C, use a função strcmp(). Não dá pra fazer if (strin1 == strin2) etc.

[]'s

LNW

Obrigado pela ajuda e compreensão!

Você foi de grande ajuda, aprendi C sozinho na web por isso cometo esses erros básicos (burros), mas um dia aprenderei tudo melhor.

Mas tem uma coisa que eu não havia explicado, mas como é o maior problema agora vamos lá: aquele laço do while pode até estar errado, mas não sei se ele funcionaria como quero. Explicação:

O laço terá que fica verificando se recebeu da porta uma string/vetor/array (entenda como quiser) de 12 caracteres, enquanto não recebe ela terá que ficar rodando o que está dentro do laço. Dentro da laço ele vai continuar lendo a porta, mas para receber string/vetor/array de um valor maior e com informações diferentes (que ainda arranjarei uma forma de identificar, pois provavelmente terá 12 caracteres mas é uma informação diferente, para isso penso em colocar alguma letra no inicio para identificar, e dar um explode(se possível) para manipula-la.).

Isso é possível??

Agradeço de qualquer forma por já ter me ajudado demais e com educação!

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!