Bom, tenho um trabalho pra fazer em c/c++ que funciona da seguinte maneira:
Existe um arquivo de entrada .txt, com 2 listas de números, tenho que pegar essas 2 listas, juntar as 2 e me livrar das duplicatas e jogar o resultado em outro txt, exemplo:
entrada.txt:
[1 2 23 42] [3 32 4 23 1]
saida.txt:
[1 2 3 4 23 32 42]
Não precisa estar ordenado que nem no exemplo acima.
Eu fiz, lendo char por char, ignorei o primeiro '[', depois verifiquei se vinha algo diferente de ']' em seguida e se viesse, eu ia pondo o caracter num array que fiz assim:
char *caracVetor = (char *) malloc(sizeof(char)*2147483647);
Quando chegasse no espaço, parava e transformava o array em inteiro, com a função atoi.
//Passando o que tem dentro do arquivo para a 1ª lista
fscanf (in, "%c", &caracter); //Lendo o caracter '['
for (; caracter != ']';) { //O for funciona enquanto caracter for diferente de ]
fscanf(in, "%c", &caracter);
if (caracter == ']') break; //Se achar o caracter ] logo de cara, acaba o loop.
else { //Se não:
for (int o = 0; caracter != ' '; o++) { //Loop pra pegar números grandes
caracVetor[o] = caracter; //Joga o caracter dentro do vetor de caracteres
fscanf (in, "%c", &caracter); //Ve quem é o proximo no arquivo
if (caracter == ' ' || caracter == ']') { //Se for espaço ou ], acaba
aux = atoi(caracVetor); //Transforma o vetor de caracteres em inteiro
break;
}
}
insert(aux, h1); //Insere na lista 1
qntdLista1++;
free(caracVetor);
}
}
Está dando tudo certo, o problema é o seguinte(paranoia minha):
E se o professor por como exemplo um número maior que 2147483647?
Entendo que posso mudar a struct da lista e fazer ela aceitar long int invés de só int e também posso aumentar esse número no malloc, mas tudo tem 1 limite. Existe alguma forma de quebrar esse limite? Se o professor por um número como "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" existe alguma forma de eu pegar ele no arquivo e transformar em inteiro depois? Ou é impossível e nem preciso me preocupar com isso?