bonsoir,

Je me suis fait un code qui permet de concatener des chaine de caracteres.

Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
char *str_concat(char *cs, ...) {
	va_list va;
	const char *ct;
	char *s;
	size_t size;
 
	size = 1;
	s = NULL;
 
	va_start(va, cs);
	while ((ct = va_arg(va, char *)) != NULL) 
		size += strlen(ct);
 
	s = (char *) calloc(size * sizeof(char), sizeof(char));
 
	if (s == NULL)
	{
		printf("in str_concat : malloc() failed.\n");
		fflush(stdout);
	}
 
	else
	{
		va_start(va, cs); 	
		strcpy(s, cs);
 
		while ((ct = va_arg(va, char *)) != NULL) 
			strcat(s, ct);
	}
 
	return s;
}

lorsque je l utilise je fais par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
void init_dir(char *rep_dir_path, list_t l) 
{
	int path_len;
	char *path;
 
	path_len = strlen(rep_dir_path);
 
	mkdir(rep_dir_path, S_IRWXU);
 
	path = str_concat(rep_dir_path, "/Divers", NULL);
	mkdir(path, S_IRWXU);
 
	while (fdt_list != NULL) 
	{
		path = str_concat(rep_dir_path, "/", l->name, NULL);
		mkdir(path, S_IRWXU);
		l = l->next;
		free(path);
	}
 
}
list_t est une liste de chaine de caracteres.

Ca me fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
*** glibc detected *** free(): invalid next size (fast): 0x08053298 ***
Aborted
Je ne comprend pas pourquoi .... Meme sans le free cela me fait une erreure qui est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
*** glibc detected *** malloc(): memory corruption: 0x08052cc8 ***
Aborted

Merci