Ir ao conteúdo
  • Cadastre-se
Kleber Lauton

RESOLVIDO Consigo cadastrar char de até 7 caracteres, mais que isso dá erro. Por que?

Recommended Posts

Estou cadastrando informações de 2 livros neste código e preciso utilizar ponteiros para alocar os chars.

 

O programa está pronto e só possui este problema. Na main, quando eu cadastro mais que 7 caracteres em uma variável char da struct livros o programa fecha. Menos que isso funciona perfeitamente, creio que fiz o uso correto do malloc.

 

Início

#include <cstdlib>#include <iostream>#include <string.h>#include <stdio.h>#define n 2using namespace std;struct livros{	int codigo[n];	char doacao[n]; 		// s/n	char *obra[n];	char *autor[n];	char *editora[n];	int area[n]; 			//1 - exatas, 2 - humanas, 3 - biológicas	char *key1[n];	char *key2[n];	char *key3[n];};

main

int main(int argc, char *argv[]){		livros x;	bool pesq = false;	char *busca2;   	int codigo,i,busca,resul,escolha;   	int exatas=0, humanas=0, biologicas=0;										  	for (i=0;i<n;i++){	//le os códigos dos livros				  		cout << "---------" << i+1 <<  "o Livro " << " ---------\n";        	cout <<"\nEntre com o codigo da obra: ";    	cin >> x.codigo[i];fflush(stdin);     	cout << endl;    }									//ordena os códigos	quick(x.codigo,0,n-1);      	  for (i=0;i<n;i++){					cout << "\n";		cout << "--------- Livro " << x.codigo[i] << " ---------\n";		do{			cout <<"\nA obra e uma doacao? <s> SIM <n> NAO: ";    		cin >> x.doacao[i];fflush(stdin);    		}while(x.doacao[i] != 's' && x.doacao[i] != 'n');   				cout <<"\nQual o nome da obra?: ";    	x.obra[i] = (char *) malloc(sizeof(60));		cin >> x.obra[i];fflush(stdin); 			 	cout <<"\nInsira o nome do autor: ";    	x.autor[i] = (char *) malloc(sizeof(60));		cin >> x.autor[i];fflush(stdin);    				    	cout <<"\nDigite o nome da editora: ";    	x.editora[i] = (char *) malloc(sizeof(60));		cin >> x.editora[i];fflush(stdin);     		do {    		cout <<"\nQual a area do livro? <1> EXATAS <2> HUMANAS <3> BIOLOGICAS: ";			cin >> x.area[i];fflush(stdin);     			if (x.area[i] == 1) exatas++;    			if (x.area[i] == 2) humanas++;    			if (x.area[i] == 3) biologicas++;    			if (x.area[i] < 1 || x.area[i] > 3) cout << "\nArea invalida. Digite novamente.";    	}while(x.area[i] < 1 || x.area[i] > 3);    	    	cout <<"\nDigite a 1a palavra chave da obra: ";    	x.key1[i] = (char *) malloc(sizeof(60));		cin >> x.key1[i];fflush(stdin);         	cout <<"\nDigite a 2a palavra chave da obra: ";    	x.key2[i] = (char *) malloc(sizeof(60));    	cin >> x.key2[i];fflush(stdin);     	    	cout <<"\nDigite a 3a palavra chave da obra: ";    	x.key3[i] = (char *) malloc(sizeof(60));    	cin >> x.key3[i];fflush(stdin); 		cout << "\n";	}		cout << "\n\n";	system("pause");	return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz sentido usar sizeof(60).

Dependendo da implementação do compilador, ele vai retornar o tamanho de um inteiro que pode ser 2 ou 4 bytes.

Se quiser alocar espaço para 60 caracteres, basta passar o valor sem sizeof.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×