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

Sign in to follow this  
Rorsch

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

Recommended Posts

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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.