I do not know if I could make myself understood in the title, but when I use strcpy()
to copy a char*
to another when I put a format so "teste"
it works normally, but when I put a string format 3 letters (digits in case), for example "2000"
it ends up merging this value to the destination with the next value the next time I use strcpy()
, it follows the code:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char nome[80];
char ano[4];
char diretor[80];
} Filme;
void analise(Filme *filme, const char *arg1, const char *arg2, const char *arg3)
{
Filme _filme = {
.nome = malloc(2),
.ano = malloc(2),
.diretor = malloc(2)
};
strcpy(_filme.nome, arg1);
strcpy(_filme.ano, arg2);
strcpy(_filme.diretor, arg3);
memcpy(filme, &_filme, sizeof _filme);
}
void carregar(Filme filmes[])
{
analise(&filmes[0], "E o Vento Levou", "1939", "Victor");
analise(&filmes[1], "teste", "998", "bar");
analise(&filmes[2], "Os Passaros", "1963", "Alfred Hitchcock");
}
int main()
{
Filme filmes[1000];
carregar(filmes);
printf("\nmain:\n");
printf("- Nome: %s\n", filmes[0].nome);
printf("- Ano: %s\n", filmes[0].ano);
printf("- Diretor: %s\n", filmes[0].diretor);
printf("----------------\n");
printf("- Nome: %s\n", filmes[1].nome);
printf("- Ano: %s\n", filmes[1].ano);
printf("- Diretor: %s\n", filmes[1].diretor);
printf("----------------\n");
printf("- Nome: %s\n", filmes[2].nome);
printf("- Ano: %s\n", filmes[2].ano);
printf("- Diretor: %s\n", filmes[2].diretor);
return 0;
}
Please note that I ran this:
analise(&filmes[0], "E o Vento Levou", "1939", "Victor");
analise(&filmes[1], "teste", "998", "bar");
analise(&filmes[2], "Os Passaros", "1963", "Alfred Hitchcock");
When running the problem the output is this:
main:
- Nome: E o Vento Levou
- Ano: 1939Victor
- Diretor: Victor
----------------
- Nome: teste
- Ano: 998
- Diretor: bar
----------------
- Nome: Os Passaros
- Ano: 1963Alfred Hitchcock
- Diretor: Alfred Hitchcock
See that in "And the Wind Took" and "The Birds" the years were mixed with the name of the director, 1939Victor
and 1963Alfred Hitchcock
, already in the case of:
analise(&filmes[1], "teste", "998", "bar");
It has the correct output. I understand that I should make the year with int
, but I'm learning C and would like to better understand this part of memory, I assume it was some typing my .