• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rorsch

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

7 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link 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