Ir para conteúdo
Fórum Script Brasil
  • 0

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


João Vitor Alves

Pergunta

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...