Bonjour,
voià je desire supprimer d'une chaine de caractere les n premiers caracteres (par exemple les n premiers espaces)
Exemple:
"_______bonjour_" devient "bonjour_"
(_: pour la représentation d'un espace)

donc je ne vais pas y aller par 4 chemins voic mon programme:
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
33
34
35
36
37
38
 
#include "stdafx.h"
#include <conio.h>
 
void supprFisrt(char* buf, int buflen, char c) 
{ 
    char * tmp = (char*)malloc(sizeof(char)*buflen);
    int current = 0;
    memcpy(tmp, buf, buflen);
    while ((*tmp) && (current < buflen) && (*tmp == c) )
   {         
      tmp++; 
      current++;
   }
 
memset(buf, '\0', 1);
memcpy(buf, tmp, buflen);	
buf[buflen-current] = 0; 	
printf("adr buf = %p\n", &buf);
printf("adr tmp = %p\n", &tmp);
 
//free(tmp); //ERREUR ICI !!??
return; 
}
 
int main()
{
  char *data = (char*)malloc(1000);
  memcpy(data, "  information\0", 14);
  printf("data = [%s]\n", data);
  printf("adr data= %p\n", &data);
 
 supprFisrt(data, 14, ' ');
 printf("data = [%s]\n", data);
 free(data);
 getch();
 return 0;
}
Voila. Je ne vois pas du tout pourquoi le free plante !!


J'ai aussi une autre question.
Admettons cette fonction toute simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
char* affich()
{
char *out= (char*)malloc(10);
mempcy(out, "tomate\0",7);
return out;
}
Jusque la ok pas de problème... et maintenant si dans le main je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
printf("%s\n", affich()); //j'appelle ma fonction qui retourne un char*
Quand est ce que out est désalloué ???


Merci pour m'avoir lu et merci encore de me répondre...