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

Vetor de variáveis "char" sem limite


novice

Pergunta

Quando coloco:

char entrada[]={};

teoricamente o limite de variáveis do vetor deveria ser igual ao número de caracteres q o usuário colocasse +1, mas na hora de testar o programa, quando entro com mais d 28 caracteres, ele da pau.

Por que? E como corrigir?

Para ajudar ta aki o arquivo fonte q usei para testar:

#include <iostream>

using namespace std;

int main()

{

char entrada[]={};

cin>>entrada;

cout<<endl;

for(int a=0; entrada[a]!=''; a++)

{

cout<<entrada[a]<<", ";

}

return 0;

}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Teoricamente, isso seria o mesmo que escrever char entrada[0] ou char entrada[1]. (não sei qual é ao certo)

Não existe esse tipo de alocação dinâmica em C (aonde tal variável se ajuste ao tamanho "automaticamente"), se estiver usando C++, pode usar a STL. (mas acho que mesmo assim não há como)

O certo seria declarar um array para guardar um número grande o bastante de caracteres.

Geralmente é usado 1024. (que normalmente é o tamanho de uma linha)

Logo, use:

char entrada[1024];

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
Teoricamente, isso seria o mesmo que escrever char entrada[0] ou char entrada[1]. (não sei qual é ao certo)

Não existe esse tipo de alocação dinâmica em C (aonde tal variável se ajuste ao tamanho "automaticamente"), se estiver usando C++, pode usar a STL. (mas acho que mesmo assim não há como)

Mas então como se explica o fato de ele ter aceitado a entrada de até 28 caracterses?

Em um programa um pouco mais complexo, ele aceitava até 6 caracteres antes de dar pau.

Além disso, quando coloco um limite(ex: char entrada[5]) ele aceita um pouco mais de 5 digitos(de entrada[0] até entrada[4] + '0\')

Link para o comentário
Compartilhar em outros sites

  • 0

Você está escrevendo em memória que não é sua.

#include <stdio.h>

struct exemplo {
     int array[2];
     int z;
};

int main(void) {
    struct exemplo var;

    var.array[0] = 20;
    var.array[1] = 30;
    var.array[2] = 40; /* note que aqui você está escrevendo em array[2], que é uma posição que "não existe" no array */

    printf("%d - %d - %d\n", var.array[0], var.array[1], var.z);

    return 0;
}

É o mesmo princípio, só que você está escrevendo em memória de outro programa.

Abraços.

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...