Eu defino um maximo de caracter. Mas ele passa porque? - C, C++ - Fórum Script Brasil
Eu defino um maximo de caracter. Mas ele passa porque?
Asked by João Vitor Alves,
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?
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:
Claramente você vai precisar de um for double para mostrar isso:
for (i=0; i<3 ;i++ ){
for (x=0; x<3 ; x++ ){
printf("%d ", m[i][x]);
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.
for (i=0; i<3*3 ;i++ ){
printf("%d ", m[0][i]);
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?