Tenho o seguinte trecho de código e minha dúvida é se estou fazendo corretamente a alocação e como posso verificar o tamanho de *nome, se ele realmente tem o tamanho do nome. O sizeof sempre retorna 8 bytes, acho que deve ser o tamanho de um ponteiro, mas o que eu quero saber é o tamanho do lugar para o qual ele aponta, no caso nome.
Outra dúvida, a função fgets() recebe os caracteres até encontrar o '\n' e no final adiciona o caractere '\O' correto ? Sendo assim ednux seria: 'e','d','n','u','x','\n','\O' , então usando strlen() eu teria 6 caracteres, pois ela para de contar quando encontra o '\O'. O correto seria eu deixar o '\n' ou tirar ele ? e a função strcpy() copia até encontrar o caractere nulo ?
O objetivo desse código é pedir um nome, armazenar ele, medir o tamanho necessário em bytes e armazenar na struct somente o necessário. E se possível uma forma de medir a quantidade de bytes que o nome ocupa dentro da struct.
printf("Digite seu nome: ");
fgets(nome,100,stdin);
num = strlen(nome) + 1;
printf("%i caracteres\n", num);
aluno.nome = (char *) malloc(num*sizeof(char));
strcpy(aluno.nome, nome);
printf("%s", aluno.nome);
free(aluno.nome);
return 0;
}
Bom é isso, caso você tenha uma forma melhor de se escrever esse código, pode postar embaixo... Eu só queria fugir um pouco dos exemplos genéricos encontrados em livros... Ah eu tenho funções próprias para medir o tamanho de strings e para copiar strings, só coloquei a biblioteca string.h por conveniência. ^^