Logo Hardware.com.br
diegounesp
diegounesp Novo Membro Registrado
5 Mensagens 0 Curtidas

[Resolvido] Problema com alocação de memória em C

#1 Por diegounesp 20/09/2010 - 18:24
Meu problema é o seguinte:
No meu programa uso as seguintes variáveis:

[php]char *Nome, *Sobrenome, *Registro[/php]Em uma de minhas funções eu aloco memória com o comando malloc e leio o nome, sobrenome, etc. e junto tudo da seguinte forma:

[php]sprintf(Registro, "%d#%s#%s#%f#%f#%f#", RA, &Nome, &Sobrenome, Nota1, Nota2, Nota3)[/php]Se eu declaro as variáveis globalmente, tudo funciona bonitinho e a string Registro fica do jeito que eu quero:
1234#João#da Silva#1.000000#1.000000#1.000000#
Mas se eu declaro as variáveis na própria função, o nome fica zuado, tipo:
1234#da S#da Silva#1.000000#1.000000#1.000000#
O que estou fazendo de errado?
diegounesp
diegounesp Novo Membro Registrado
5 Mensagens 0 Curtidas
#3 Por diegounesp
20/09/2010 - 18:43
O código é um pouquinho grande... eu vou posta uma parte dele:

[PHP]void Menu_Insercao(FILE *Arq, short int Tipo)
{
unsigned int RA, TamanhoRegistro, Posicao;
char *Nome, *Sobrenome, *Registro, Continuar='s';
float Nota1, Nota2, Nota3, Media;
do
{
printf(" INSERÇÃO DE NOVOS ALUNOS\n\n\n");
printf(" Aluno: RA: ");
scanf("%d%*c", &RA);
Nome = (char *) malloc (50 * sizeof(char));
if (Nome == NULL)
{
printf("\n Erro na alocação de memória!");
getch();
return;
}
printf(" Nome: ");
scanf("%[^\n]%*c", &Nome);
Sobrenome = (char *) malloc (50 * sizeof(char));
if (Sobrenome == NULL)
{
printf("\n Erro na alocação de memória!");
getch();
return;
}
printf(" Sobrenome: ");
scanf("%[^\n]%*c", &Sobrenome);
printf("\n Notas: 1ª: ");
scanf("%f%*c", &Nota1);
printf(" 2ª: ");
scanf("%f%*c", &Nota2);
printf(" 3ª: ");
scanf("%f%*c", &Nota3);
Media = ((Nota1 + Nota2 + Nota3)/3);
printf(" Média: %f", Media);
Registro = (char *) malloc (150 * sizeof(char));
if (Registro == NULL)
{
printf("\n Erro na alocação de memória!");
getch();
return;
}
sprintf(Registro, "%d#%s#%s#%f#%f#%f#", RA, &Nome, &Sobrenome, Nota1, Nota2, Nota3); [/PHP]

Eu acho que isso já é suficiente pra vcs entenderem.
fenixagua
fenixagua Membro Senior Registrado
232 Mensagens 8 Curtidas
#4 Por fenixagua
20/09/2010 - 18:52
sprintf(Registro, "%d#%s#%s#%f#%f#%f#", RA, &Nome, &Sobrenome, Nota1, Nota2, Nota3);
Bem primeiro porque você passa o endereço do ponteiro Nome e do ponteiro Sobrenome, eles já são ponteiros deve ser isso que esta dando problemas, já que a função sprintf (quando o parametro é uma string, %s) pede um ponteiro e não ponteiro de ponteiro.
Não é porque você alocou dinamicamente uma string no ponteiro que ele deixa de ser um ponteiro tenta trocar isso já que o unico problema que eu vejo.

Outra coisa faça a alocação das variaveis todas de uma vez para deixar o código um pouco mais claro, ok?


Edit:
Se eu não me engano o scanf também não precisa de ponteiro para ponteiro e sim um ponteiro só, tenta tirar também dos scanfs, ok?
© 1999-2025 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal