Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rorsch

[Resolvido] Escrever dado de uma estructura de dados no ecrã

Mensagens Recomendadas

Rorsch

Não estou a conseguir escrever no ecrã dados de uma estructura que defini:

struct registo {

        int ident;

        int money;

} saldo[PESSOAS];

printf("Tem actualmente %d fichas.\n", &saldo[posb].money);

Devolve-me um aviso e escreve um número marado.


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Faz assim:

printf("Tem actualmente %d fichas.\n", saldo[posb].money);

A diferença entre esta instrução e a tua é na inexistência do &.

Com o &, estás a passar o endereço de memória para o printf() e a pedir-lhe para ele interpretar esse endereço como um int. Tiveste sorte em ele não te formatar o disco :)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rorsch

Nem mais :-[ obrigado mais uma vez


I would rather be a ghost drifting by your side as a condemned soul than enter heaven without you... Because of your love, I will never be a lonely spirit.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ribamar

Faz assim:

printf("Tem actualmente %d fichas.\n", saldo[posb].money);

A diferença entre esta instrução e a tua é na inexistência do &.

Com o &, estás a passar o endereço de memória para o printf() e a pedir-lhe para ele interpretar esse endereço como um int. Tiveste sorte em ele não te formatar o disco ;)

formatar o disco estando a aceder à memoria?

E mesmo a memoria n é "danificada" uma vez que o SO protege a zona de memoria que o SO esta a usar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jeronimus Linuxius
Devolve-me um aviso e escreve um número marado.

Esse número é o endereço da variável está alocada, e não consta que esteja marado. :-P

formatar o disco estando a aceder à memoria?

E mesmo a memoria n é "danificada" uma vez que o SO protege a zona de memoria que o SO esta a usar

Acho que ele estava a gozar...

JJ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg
printf("%d\n", &something);
Acho que ele estava a gozar...

Mais ou menos ;)

Numa máquina "normal" actual (Windows ou Linux), é impossível aquele código formatar o disco.

Mas ... e no computador duma injecção electrónica ... ou num computador dum detector de incêndios?

E num compudator de há 20 anos? E num computador daqui a 30 anos?

Em suma ... não façam isso. Se é para imprimir um int ("%d") não forneças ao printf() um ponteiro!


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jeronimus Linuxius
Em suma ... não façam isso. Se é para imprimir um int ("%d") não forneças ao printf() um ponteiro!

Ia dizer que em termos de operação do printf isso não é nada mas não é verdade: acho que converter ints em ponteiros cai em undefined behaviour, e geralmente o que está em causa nesses casos é mesmo undefined. :-)

Portanto, neste sentido, passar um ponteiro a um printf para ele o imprimir como int tem tanta probabilidade de te formatar o disco como de te sair um número "marado".

http://c-faq.com/ansi/undef.html

Lê a este propósito o parágrafo 7.

JJ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.