João Vitor Alves 0 Posted March 21 Report Share Posted March 21 Se eu coloquei char nome[4] , ele não tera que ter um maximo de 4 caracteres ? porque o meu passa no exemplo eu coloquei joaooooooooooooooo, e mesmo assim foi. não teria que dar um erro ou não ir? Quote Link to post Share on other sites
0 vangodp 0 Posted March 22 Report Share Posted March 22 Em 21/03/2021 em 16:47, João Vitor Alves disse: ele não tera que ter um maximo de 4 caracteres ? Não! Da onde foi que você tirou isso? Em C não há mamãe. Se você declarar 4 e enfiar 100 o problema é seu. O que pode acontecer é que seu programa funcione ou não. Imaginou você aí todo contente... de ter feito o novo WhatsApp, e quando todo mundo descarregar ploff!? XDDD C e C++ a diferença de outras tantas linguagens é que se supõe que o programador tem tudo baixo controle. Onde outras linguagens abstraem coisas C é muito concreto. Em Java por exemplo você sai do índice e o programa já vai soltando mensagens. Parece ser que C/C++ esta feito por uma banda de macacos e que tem coisas que acontecem por como por arte de magia ou é questão de azar ou sorte. Pois bem.... deixe-me lhe dizer que nada é fruto do azar em c, e tudo tem um por que. Deixe me lhe ilustrar um caso e você vai começar a entender. Imagine um caso no qual você tenha uma matriz deste modo: 123 456 789 Claramente você vai precisar de um for double para mostrar isso: #include<stdio.h> int main(){ int i; int x; int m[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; for (i=0; i<3 ;i++ ){ for (x=0; x<3 ; x++ ){ printf("%d ", m[i][x]); } } return 0; } Pois bem... saiba que se conhecer algo de memória e como vai parar cada variável em esta, você pode se aproveitar e fazer o mesmo trabalho com um só for. #include<stdio.h> int main(){ int i; int m[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; for (i=0; i<3*3 ;i++ ){ printf("%d ", m[0][i]); } return 0; } A saída deste programa é exatamente a mesma do outro, eu só me aproveitei para realizar o mesmo trabalho com maior facilidade devido a minha maior experiência. Muito provavelmente nem seu professor conheça esse "macete", ou pode que sim, e pode que conheça alguns outros que eu nem tenha ouvido falar, como falei é coisa de experiência. Quanto mais você dominar a linguagem menos estranho você vai achar essas coisas. Um caso poderia ser que você escrevesse em uma variável e que mesmo saindo de rango fosse possivel escrever em outra variável que estivesse a continuação, não imagino um caso mas é perfeitamente legal em C, já em outras linguagens..... Procure sempre ter suficiente memória para sua entrada. Lembre que estamos falando de bytes. É ridículo tentar economizar bytes si qualquer computador de hoje tem minimo 4 gigas de RAM, sem isso certamente você nem arranca o wondows. Seu char nome[4] poderia ser perfeitamente char nome[1024] e seus programas ou sistema operativo nem iam sentir a menor dor XDDD E n precisa declarar 1024 em todas as variáveis. você pode ter uma variável como char buffer[1024], e logo você pode checar o tamanho logo após leitura e atribuir o que foi lido a outra como char nome[100], caso tiver mais de 100 chars em buffer não faça a copia de buffer para nome. Tendeu? Quote Link to post Share on other sites
0 João Vitor Alves 0 Posted March 22 Author Report Share Posted March 22 (edited) entendi obg #include<stdio.h> int main(){ int i; int x; int m[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; for (i=0; i<3 ;i++ ){ for (x=0; x<3 ; x++ ){ printf("%d ", m[i][x]); } } return 0; } Edited March 22 by João Vitor Alves Quote Link to post Share on other sites
Question
João Vitor Alves 0
Se eu coloquei char nome[4] , ele não tera que ter um maximo de 4 caracteres ? porque o meu passa no exemplo eu coloquei joaooooooooooooooo, e mesmo assim foi.
não teria que dar um erro ou não ir?
Link to post
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.