Jump to content
Fórum Script Brasil
  • 0

Eu defino um maximo de caracter. Mas ele passa porque?


Question

2 answers to this question

Recommended Posts

  • 0
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?

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149422
    • Total Posts
      645925
×
×
  • Create New...